django - 如何显示存储在 Django 会话系统中的本地 url 的缩略图?
问题描述
Django 3 + sorl-thumbnail 12.7.0
你好!我正在使用会话系统来存储这样的各种项目:
- request.session['购物车'][1]
- request.session['购物车'][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,
}
现在它起作用了,安全系统继续强大
推荐阅读
- java - 为什么位置在 android 10 的应用程序中不起作用?
- apache-kafka - Kafka 连接在 docker 中找不到代理
- javascript - 无法连接到我的 MongoDB 数据库,在 Mongodb Compass 上收到此错误“Server Selection Timed Out After 3000ms”
- forms - 使用 Razorpages 模型绑定时在发布后清除表单
- python - Python获取数字序列中2列之间的最小值最大值
- context-free-grammar - 这种任意语言中的“开始”和“结束”是否应该与 CFG 有关?
- android - 如何在底部导航栏 Android Studio 中添加外部网站链接
- powershell - 从 Citrix Director 检索历史数据
- php - 使用 Laravel 5.6 的控制器不存在
- r - 按其他列选择数据表中的值