可以用其他变量访问django模板语言中的变量属性吗?
Can you access variable attributes in the django template language with other variables?
假设我有两个变量 - User 和 Fruitlist。 User是一个模型实例,而fruitlist是一个列表。
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user.fruit }} </td>
{% endfor %}
{% endfor %}
我正在尝试使用上面的代码创建一个 table,其中为 fruitlist 中的每个水果创建一列,并且该列填充了属性 user.fruit 的值(用户模型为每个包含值的水果都有一个字段。
为什么上面的代码不起作用?
编辑:
下面原始问题的解决方案 - 以下是关于表格的
表格:
{% for fruit in fruits %}
{% if user|get_attr:fruit != True %}
{{ form|get_attr:fruit }}
{% else %}
<p>✓ {{ fruit }}</p>
{% endif %}
{% endfor %}
您的代码不起作用,因为属性 fruit 被解释为字符串。
您可以编写自定义过滤器来检索属性作为模板中的变量。
# your_app_name/templatetags/your_app_name_tags.py
from django import template
register = template.Library()
@register.filter
def get_attr(obj, attr):
return getattr(obj, attr)
然后在你的模板中
{% load your_app_name_tags %}
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user|get_attr:fruit }} </td>
{% endfor %}
{% endfor %}
替换:
<td>{{ user.fruit }} </td>
与:
<td>{{ user[fruit] }} </td>
幸运的是,您可以在此处像访问字典键一样访问属性。
尽管根据您的描述,这可能不是正确的解决方案。
如果水果列表是这样的:
fruitlist = ['apple', 'orange', 'banana']
那么应该是一个适用的方案
假设我有两个变量 - User 和 Fruitlist。 User是一个模型实例,而fruitlist是一个列表。
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user.fruit }} </td>
{% endfor %}
{% endfor %}
我正在尝试使用上面的代码创建一个 table,其中为 fruitlist 中的每个水果创建一列,并且该列填充了属性 user.fruit 的值(用户模型为每个包含值的水果都有一个字段。
为什么上面的代码不起作用?
编辑:
下面原始问题的解决方案 - 以下是关于表格的
表格:
{% for fruit in fruits %}
{% if user|get_attr:fruit != True %}
{{ form|get_attr:fruit }}
{% else %}
<p>✓ {{ fruit }}</p>
{% endif %}
{% endfor %}
您的代码不起作用,因为属性 fruit 被解释为字符串。
您可以编写自定义过滤器来检索属性作为模板中的变量。
# your_app_name/templatetags/your_app_name_tags.py
from django import template
register = template.Library()
@register.filter
def get_attr(obj, attr):
return getattr(obj, attr)
然后在你的模板中
{% load your_app_name_tags %}
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user|get_attr:fruit }} </td>
{% endfor %}
{% endfor %}
替换:
<td>{{ user.fruit }} </td>
与:
<td>{{ user[fruit] }} </td>
幸运的是,您可以在此处像访问字典键一样访问属性。
尽管根据您的描述,这可能不是正确的解决方案。
如果水果列表是这样的:
fruitlist = ['apple', 'orange', 'banana']
那么应该是一个适用的方案