You need to enable JavaScript to run this app. Django模板循环中如何通过循环变量获取字典对应动态键的值
优惠活动
大模型
产品
解决方案
定价
更多

Django模板循环中如何通过循环变量获取字典对应动态键的值

问题核心原因

Django模板引擎的点号(.)查找逻辑不会做动态变量解析,只会做字面匹配:

  • 当你写{{ domain_dict.6 }}时,引擎会识别.6是数字字面量,自动转成整数键,去domain_dict里找键为6的条目,所以能正常返回结果。
  • 当你写{{ domain_dict.domain_id }}时,引擎会把domain_id当成字面的字符串键名,去domain_dict里找键为字符串"domain_id"的条目——这个键根本不存在,自然返回空值,完全不会读取你在{% with %}块里定义的domain_id变量的实际取值。

可落地的解决方法

方法1(最稳妥,无版本依赖,推荐):视图层预先绑定对应值

完全规避模板里的动态字典查找逻辑,在后端拿到domain_dict之后,直接把对应的值挂到每个循环遍历的domain对象上,从根源减少模板逻辑复杂度:

def get(self, request, *args, **kwargs):
    domains = Domain.objects.all()
    domain_dict = {}
    # ... 原有domain_dict处理逻辑
    # 给每个domain实例绑定对应的字典内容
    for domain in domains:
        domain.content = domain_dict.get(domain.id, '')
    context = {
        'domains': domains
    }
    return render(request, self.response_template, context)

模板里直接读取绑定好的属性即可:

<div class="col-md-8">
    <div class="tab-content">
        {% for domain in domains %}
            <div class="tab-pane container p-0 {% if forloop.first %} active {% endif %}" id="services{{domain.id}}">
                <div class="img" style="background-image: url('static/counsellor/images/service-1.png');">
                </div>  
                <h3><a href="#">Name: {{domain.name}} ID: {{domain.id}}</a></h3>
                <p>{{ domain.content }}</p>
            </div>
        {% endfor %}
    </div>
</div>

方法2:高版本Django用内置标签实现动态取值

如果你使用的是Django 3.2及以上版本,可以用内置的{% at_index %}标签直接实现动态索引取值,不需要写额外的自定义逻辑:

<div class="col-md-8">
    <div class="tab-content">
        {% for domain in domains %}
            {% with domain_id=domain.id %} 
            <div class="tab-pane container p-0 {% if forloop.first %} active {% endif %}" id="services{{domain.id}}">
                <div class="img" style="background-image: url('static/counsellor/images/service-1.png');">
                </div>  
                <h3><a href="#">Name: {{domain.name}} ID: {{domain_id}}</a></h3>
                {% at_index domain_dict domain_id as domain_content %}
                <p>{{ domain_content }}</p>
            </div>
            {% endwith %}
        {% endfor %}
    </div>
</div>

内容的提问来源于stack exchange,提问作者Md. Imrul Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 20:06:04