微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从存储在 Django 会话系统中的本地 url 显示缩略图?

如何解决如何从存储在 Django 会话系统中的本地 url 显示缩略图?

Django 3 + sorl-thumbnail 12.7.0

你好!我正在使用会话系统来存储这样的各种项目:

  • request.session['cart'][1]
  • request.session['cart'][2]
  • ...
  • request.session['cart'][n]

在每个会话单元中,我想存储 product.image.url 和产品的其他字段:

        request.session.setdefault('cart',{})[str(request.session['counter'])] = {
            'producto': p.pk,'talla':    talla,'cantidad': cantidad,'producto_abstracto': p.producto_abstracto.pk,'imagen':      p.imagen_1.url,'nombre':      p.producto_abstracto.nombre_producto,'marca':       p.producto_abstracto.marca.marca,'precio_venta':p.producto_abstracto.precio_venta,'nombre_color':p.color_principal_id.nombre,'color':       p.color_principal_id.codigo,}

(出于安全考虑,我不能使用 pickleserializer 在会话中存储完整的对象 Product)。然后我想在视图中将 product.image 显示缩略图,但这就是问题所在。似乎 sorl-thumbnail 只适用于图像对象,但我只有 url。

然后在模板中我试试这个:

{% load thumbnail %}

{% thumbnail '{{item.imagen}}' '300x300' as im %}
    <img class="im" style="width:100%;" src='{{ im.url }}'></img>
{% endthumbnail %}

因此,我有一个 404 not found 图像,缓存中的路由是这样的:media/cache/31/a0/31a02cc7b19899a208a972a08e17fe12.jpg 到未创建的文件

作为评论,当我使用带有经典 django 对象和图像的缩略图时,它可以工作,所以我认为这不是媒体和静态路由或 memcached 的问题。

如何解决此问题并在会话系统中显示来自 url 的缩略图

解决方法

我终于在视图中使用 sorl-thumbnail 解决了它。当我创建会话对象时,我修改了 url 的存储方式:

from sorl.thumbnail import get_thumbnail
request.session.setdefault('cart',{})[str(request.session['counter'])] = {
            'producto': p.pk,'talla':    talla,'cantidad': cantidad,'producto_abstracto': p.producto_abstracto.pk,'imagen':      get_thumbnail(p.imagen_1,'300x300').url,'nombre':      p.producto_abstracto.nombre_producto,'marca':       p.producto_abstracto.marca.marca,'precio_venta':p.producto_abstracto.precio_venta,'nombre_color':p.color_principal_id.nombre,'color':       p.color_principal_id.codigo,}

现在它可以工作并且安全系统继续强大

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。