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

Posted

技术标签:

【中文标题】如何显示存储在 Django 会话系统中的本地 url 的缩略图?【英文标题】:how to show thumbnail images from a local url stored in session system in Django? 【发布时间】:2021-04-09 21:39:33 【问题描述】:

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 的缩略图?

【问题讨论】:

【参考方案1】:

我终于在视图中使用 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,
        

现在它可以工作了,安全系统继续强大

【讨论】:

以上是关于如何显示存储在 Django 会话系统中的本地 url 的缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 会话中存储查询集以进行分页

Django 会话与浏览器本地存储

如何使用 django 动态访问会话中的值?

本地文件系统作为 Django 中的远程存储

如何在 Django 视图中访问本地存储中的数据?

如何由于 Django 中的不活动而使会话过期?