可以用其他变量访问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>&#10003; {{ 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'] 

那么应该是一个适用的方案