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

时间:2010-08-19 00:49:16

标签: python django django-templates

我有两个4层对象,我将传递给django模板。我目前正在循环遍历每个层,如果存在则下降到一个级别。我最终得到了key,key2和key3,它表示循环时对象中的当前位置。我想使用这些变量引用具有相同层的其他对象,但是遇到了一些麻烦。

如果我试图在python中执行此操作,它将看起来像这样

my_object[ key ][ key2 ][ key3 ]

但是在django模板中,似乎我不能使用括号,如果我使用句点,它会认为键是键名,而不是将其视为变量。

如果您需要有关我的代码的更多详细信息,请与我们联系。谢谢!

编辑:以下是我的对象的示例以及我的模板代码。

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与变量1相同,具有相同的键,但缺少某些键。

以下是我的模板在整理此对象时的样子。

{% 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)

这不可能这样做。考虑为此编写模板标签或过滤器。

答案 1 :(得分:0)

在将数据发送到模板之前,我最终进行了排序和比较,因此不再需要这个问题。随意发布其他选项。