基于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 %}
我列出了一些可以放在购物车中的产品,这个购物车存储在一个会话变量字典中,其键是产品 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 %}