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

Django模板中如何将外层循环变量用于内层循环的取值操作

问题排查与修复方案

根本原因

你之前写的模板代码无法渲染内容,核心是踩了两个Django模板的语法规则坑:

  • Django模板的点号取值存在固定查找顺序,当你写data.key时,模板引擎会真的去查找data对象里字面量叫key的键/属性/数组索引,不会识别到外层循环里的key是个动态变量,自然拿不到对应键的嵌套内容——你的data字典里根本没有名为"key"的顶层键,所以内层循环拿到的是空集合,没有任何内容可以渲染。
  • 直接写{% for key in data %}遍历字典时,只会拿到字典的所有顶层键的字符串值(比如'Google_Suite'、'Language'),没有同步获取每个键对应的嵌套字典值,本身遍历逻辑就缺失了内层循环需要的数据源。

适配你嵌套字典结构的正确代码

你的后端传入的data是三层嵌套结构:顶层大分类→二级子分类→对应课程的QuerySet,逐层级遍历字典的键值对是最省事、不需要额外编写自定义逻辑的实现方式:

{% for top_key, top_value in data.items %}
  <!-- 第一层遍历:拿到顶层分类名(如Google_Suite)和对应的二级嵌套字典 -->
  {% for sub_key, sub_value in top_value.items %}
    <!-- 第二层遍历:拿到二级分类名(如Google Sheet)和对应的课程QuerySet -->
    {% for course in sub_value %}
      <div>{{ course }}</div>
    {% endfor %}
  {% endfor %}
{% endfor %}

注:Django模板引擎原生支持对字典调用.items()方法遍历键值对,不需要在后端做额外的格式转换,直接传入你现在的嵌套字典结构即可正常渲染。

特殊场景补充

如果遇到必须通过外层循环拿到的变量,作为动态键名去从字典里取值的场景,不要依赖点号直接拼接变量(比如data.外层变量),这种写法一定会被模板引擎当成字面量字符串查找,无法拿到正确值。你可以通过自定义模板过滤器实现动态字典键读取,在模板中通过{{ 目标字典|自定义过滤器:动态键变量 }}的方式取值,绕过点号取值的字面量查找限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 13:06:04