基于for循环django模板中的变量访问会话变量

Accessing session variable based on variable in for loop django template

我列出了一些可以放在购物车中的产品,这个购物车存储在一个会话变量字典中,其键是产品 ID,值是一些关于数量和东西的信息。我想添加选项以查看(在产品页面上)您的购物车中有多少该产品。

我知道我可以像这样访问 Django 模板中的会话变量:

{{ request.session.cart.2323.quantity }}

问题是,密钥(在本例中为 2323)是一个依赖于 for 循环的变量:

{% for prod in products %}
  <p>{{ request.session.cart[prod.name].quantity }}</p>
{% endfor %}

但不幸的是,这样实施是不可能的。有什么方法可以做到这一点,或者我是否必须改变我的购物车的工作方式?

您应该实现自定义模板过滤器,例如 this to have the ability to use getattr

from django import template
register = template.Library()

@register.simple_tag
def get_object_property_dinamically(your_object, first_property, second_property):
    return getattr(getattr(your_object, first_property), second_property)
{% load get_object_property_dinamically %}
{% for prod in products %}
  <p>{% multiple_args_tag request.session.cart prod.name 'quantity' %}</p>
{% endfor %}