在Django模板中使用变量作为字典键

时间:2019-08-13 09:32:46

标签: html django django-templates

我有两个具有相同键的字典。我使用一个字典来建立表格,但是我不知道如何访问其他字典。

示例

{% for key1, item1 for dict1.items %}
    {% for key2, item2 for item1.items %}
        <p>{{ item2.value }}</p>
        <p>there should be value from dict2</p>
    {% endfor %}
{% endfor %}

在python中,我可以使用dict2 [key1] [key2] [“ value”],但是如何使用模板呢?

2 个答案:

答案 0 :(得分:1)

您要么必须再编写一个for循环,这在性能方面并不是一个好主意。

但是您可以编写一个自定义模板过滤器:

@register.filter
def get_value(data, key):
    return data.get(key)

然后在您的模板中:

{% load custom_tags %}
{{ dict2|get_value:"key" }}

您还可以执行多项操作:

{{ dict2|get_value:"key"|get_value:"key2" }}

查看文档以获取更多详细信息:

Custom template tags and filters

答案 1 :(得分:0)

您在这里基本要做的是在模板中移动业务逻辑。 Django的模板语言故意没有实现带有参数和下标的函数调用,以使人们更有动力在视图中编写业务逻辑。如果您确实要使用下标,则可以使用jinja template renderer

您可以通过合并两个字典来对字典进行预处理,例如:

result = {
    k1 : {
        k2 : (v1, dict2[k1][k2]['value'])
        for k2, v1 in subd.items()
    }
    for k1, subd in dict1.items()
}

然后您可以遍历模板中的字典,例如:

{% for key1, item for result.items %}
    {% for key2, vs for item1.items %}
        <p>{{ vs.0.value }}</p>
        <p>{{ vs.1 }}</p>
    {% endfor %}
{% endfor %}

所以这里vs.1包含相应的dict2[key1][key2][value]