如何在for循环中使用django模板点表示法

2 投票
3 回答
3660 浏览
提问于 2025-04-16 08:06

我想在Django模板中获取一个字典的键值,并把它显示在页面上:

{% for dictkey in keys %}
    <p> {{ mydict.dictkey }} </p>
{% endfor %}

(假设'keys'和'mydict'已经通过上下文传递到模板中)

Django可以渲染页面,但字典的内容却没有显示出来(显示“无效的模板变量”)

我猜问题在于,它试图用mydict['dictkey']来获取值,而不是用mydict[实际的键在变量dictkey中]。那怎么才能“逃避”这种行为呢?

谢谢!

更新: 根据收到的回答,我需要补充说明,我实际上是在寻找如何在for循环中进行键查找。这更能代表我的实际代码:

{% for key, value in mydict1.items %}
    <p> {{ mydict2.key }} </p>
{% endfor %}

基本上,我有两个字典,它们的键是相同的,所以我不能对第二个字典使用items()这个技巧。

3 个回答

1

来自 http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

如果你需要访问字典里的项目,这个方法也很有用。比如说,如果你的上下文中有一个字典数据,下面的代码就可以显示字典的键和值:

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}

这里的关键是你需要调用 dict.items() 来获取 (键, 值) 这一对数据。

1

查看文档:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}
4

请查看这个回答,它可能和这个问题有点重复。

这个回答创建了一个自定义的过滤器,当你把它应用到一个字典上,并传入一个键的时候,它会用这个键去查找字典里的值,并返回结果。

代码:

@register.filter
def lookup(d, key):
    if key not in d:
        return None
    return d[key]

使用方法:

{% for dictkey in dict1.keys %}
    <p> {{ dict2|lookup:dictkey }} </p>
{% endfor %}

关于如何注册这个过滤器,可以参考文档

我觉得很遗憾,这种功能没有直接内置在系统里。

撰写回答