如何解决如何从存储在 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 的问题。
解决方法
我终于在视图中使用 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 举报,一经查实,本站将立刻删除。