首页 > 解决方案 > 如何显示存储在 Django 会话系统中的本地 url 的缩略图?

问题描述

Django 3 + sorl-thumbnail 12.7.0

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

在每个会话单元中,我想存储 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 的缩略图?

标签: djangodjango-templatesdjango-sessionssorl-thumbnail

解决方案


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

现在它起作用了,安全系统继续强大


推荐阅读