You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板中如何获取session值并仅渲染购物车所选尺码

解决方法

问题原因

你当前模板的问题是循环遍历了购物车cart的所有键值对,所以每个商品条目都会输出全部商品的尺码,只需要调用你写好的自定义过滤器直接获取当前商品对应的尺码即可。

操作步骤

    1. 加载自定义过滤器
      首先确保存放过滤器的文件位于Django应用下的templatetags目录(该目录需包含__init__.py文件,且应用已在settings.py的INSTALLED_APPS中注册)。在cart.html模板的开头引入你的过滤器文件,比如过滤器文件名为cart_filters.py,则添加如下代码:
    {% load cart_filters %}
    
    1. 优化自定义过滤器(可选)
      为避免购物车中不存在对应商品id时抛出KeyError异常,可对过滤器做兼容处理,同时注意session中存储的字典键为字符串类型,需要和商品id的类型匹配:
    @register.filter
    def item_size(cart , item):
        return cart.get(str(item.id), "无匹配尺码")
    
    1. 替换模板中的尺码渲染逻辑
      删除原有循环遍历request.session.cart.items的代码,直接调用过滤器获取当前商品的尺码,修改后的模板代码如下:
    <tbody style="margin-bottom: 20px;">
      {% for item in items %}
      <tr>
        <th scope="row">{{forloop.counter}}</th>
        <td> <img src="{{item.first.url}}" alt="" height="100px"></td>
        <td>{{item.name}}</td>
        <!-- 调用自定义过滤器获取当前商品对应尺码 -->
        <td>{{ request.session.cart|item_size:item }}</td>
        <td>{{item.price|currency}}</td>
        <td> <a href="#">Remove</a> </td>
      </tr>
      {% endfor %}
    </tbody>
    

内容的提问来源于stack exchange,提问作者Shreyash mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:39:04