在Django模板标签中使用变量作为对象键

1 投票
2 回答
1040 浏览
提问于 2025-04-16 03:00

我有两个四层的对象要传给Django模板。目前我在循环每一层,如果有下一层就继续往下走。在这个过程中,我用key、key2和key3来表示当前在对象中的位置。我想用这些变量来引用另一个有相同层级的对象,但遇到了一些问题。

如果我在Python中做这个,代码看起来会是这样的:

my_object[ key ][ key2 ][ key3 ]

但是在Django模板中,似乎不能用方括号,如果我用点号,系统会把key当成键名,而不是变量来处理。

如果你需要我代码的更多细节,请告诉我。谢谢!

编辑:这里有一个我的对象的例子,以及我的模板代码。

variable1 = {
    "content": {
        "pages": {
            "view":True,
            "add":True,
            "edit":True,
            "delete":True
        },
        "articles": {
            "view":True,
            "add":True,
            "edit":True,
            "delete":True
        },
        "slideshow": {
            "view":True,
            "edit":True
        },
    },
    "people": {
        "view":True,
        "add":True,
        "edit":True,
        "delete":True,
        "sort-staff":True,
        "sort-riders":True
    }
}

variable2和variable1是一样的,都是相同的键,但有些键缺失。

这是我用来处理这个对象的模板代码。

{% for key, value in variable1.items %}
    <strong>{{ key|title }}</strong>
    {% for key2, value2 in value.items %}
        {% if value2.items %}
            <p class="indent">{{ key2|title }}
            {% for key3, value3 in value2.items %}
                <p class="indent"><input type="checkbox" name="form_permission_{{ key }}_{{ key2 }}_{{ key3 }}" {% if variable2[key][key2][key3] %}checked="checked"{% endif %}> {{ key3|title }}</p>
            {% endfor %}
            </p>
        {% else %}
            <p class="indent"><input type="checkbox" name="form_permission_{{ key }}_{{ key2 }}"> {{ key2|title }}</p>
        {% endif %}
    {% endfor %}
{% endfor %}

如果你看最里面的那一行,你会看到{% if variable2[key][key2][key3] %}checked="checked"{% endif %}。你应该能理解我想用这段代码实现的目的。

2 个回答

0

这样做是不行的。你可以考虑写一个模板标签或者过滤器来实现这个功能。

0

我最后在把数据发送到模板之前就进行了排序和比较,所以这个问题就不需要了。如果有其他的选择,欢迎大家分享。

撰写回答