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


Django 3+sorl缩略图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缩略图只适用于图像对象,但我只有url。

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

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

    因此,我有一个404未找到的图像,在缓存中的路径如下:media/cache/31/a0/31a02cc7b19899a208a972a08e17fe12.jpg到一个未创建的文件。

    作为一个注释,当我将thummail与存储的经典django对象和图像一起使用时,它是有效的,所以我认为这不是媒体和静态路由或memcached的问题。

    我能做些什么来解决这个问题,并在会话系统中显示来自url的缩略图?

    我最终在视图中使用sorl缩略图来解决它。当我创建会话对象时,我修改了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,
    }
    

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

    最新更新