You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板中使用外部变量遍历字典的语法问题

解决Django模板中动态遍历字典键的问题

嘿,我完全懂你碰到的这个麻烦!Django模板的语法在处理动态字典键的时候确实有个容易踩的坑,而且你原来的循环写法也有个小问题,咱们一步步来解决:

首先纠正循环的对象

你定义的keydict={'keys':keys},如果直接写{% for val in keydict %},模板会遍历keydict的键集合,也就是只会循环一次,val的值是'keys',这显然不是你想要的。你需要遍历的是keydict里的keys列表,所以循环应该改成:

{% for key in keydict.keys %}

这样才能拿到你定义的['firstkey', 'secondkey']里的每个键。

核心问题:动态字典键的取值

接下来就是你遇到的关键问题:{{ exampledict.val }}这种写法在模板里是无效的——Django会把它解析成取exampledict['val'],而不是用变量val(或者这里的key)的值作为键去取值。解决这个问题有两种常用方案:

方案1:自定义模板过滤器(通用推荐)

如果你的项目里经常需要动态获取字典的值,自定义一个模板过滤器是最通用的做法:

  1. 在你的Django app下创建templatetags目录(如果没有的话),里面新建一个custom_tags.py文件,内容如下:
from django import template

register = template.Library()

@register.filter
def get_item(dictionary, key):
    # 用get方法避免键不存在时报错,返回空字符串可以根据需求调整
    return dictionary.get(key, '')
  1. 在需要使用的模板顶部加载这个自定义标签:
{% load custom_tags %}
  1. 然后在循环里就可以这样取值了:
<tr>
    {% for key in keydict.keys %}
        <td>{{ exampledict|get_item:key }}</td>
    {% endfor %}
</tr>

方案2:视图层预处理数据(简单直接)

如果只是这个场景需要,你可以在视图里提前把需要的值整理成列表,直接传给模板,这样模板里就不用处理字典的动态取值了:

在视图函数里:

exampledict = {'firstkey': firstval, 'secondkey': secondval}
keys = ['firstkey', 'secondkey']
# 按keys的顺序提取对应的值
values_list = [exampledict[key] for key in keys]
# 把values_list传给模板
context = {'values_list': values_list}
return render(request, 'your_template.html', context)

然后模板里直接遍历这个列表:

<tr>
    {% for val in values_list %}
        <td>{{ val }}</td>
    {% endfor %}
</tr>

这样既符合DRY原则,又避免了模板里的复杂逻辑,非常适合一次性的场景。


内容的提问来源于stack exchange,提问作者Marcus Grass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:14:12