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

Django中如何使用range同时遍历两个列表实现内容并排展示

问题根因
  • Django模板不支持列表.变量索引的取值语法,你写的dictItems.i会被模板解析为查找dictItems中名为i的属性,而非把i作为索引变量取值,因此无法拿到列表内容。
  • 视图中传递的range参数定义为range(0,len(data)-1),当列表长度为3时,该range仅生成0、1两个值,会漏掉最后一组数据。
最简实现方案

推荐直接在视图层用Python内置zip函数打包两个列表,生成配对的元组序列后传到模板直接遍历,无需额外处理索引,代码逻辑最清晰,改动量最小。

视图代码修改

def displayDict(request):
     data = ["a", "b", "c"]
     data2 = ["x", "y", "z"]
     # 打包两个列表为配对结构:[("a","x"), ("b","y"), ("c","z")]
     paired_data = zip(data, data2)
     return render(request, 'chattr.html',
     {
        "otherDict" : "other_bot", 
        "otherDict2": "bot",
        "paired_data": paired_data
     })

模板代码修改

{% for item1, item2 in paired_data %}
    <p>
        <b>{{otherDict}}:</b> '{{item1}}' <br>
        <b>{{otherDict2}}:</b> '{{item2}}' <br>
    </p>
{% endfor %}

如果确实不想修改视图层原有传参结构,也可以用模板过滤器实现按索引取值,把模板代码改为如下即可:

{% for i in dictItems %}
    <p>
        <b>{{otherDict}}:</b> '{{i}}' <br>
        <b>{{otherDict2}}:</b> '{{ dictItems_bot|slice:forloop.counter0|last }}' <br>
    </p>
{% endfor %}

该写法通过forloop.counter0获取当前循环的0基索引,再配合slice和last过滤器拿到对应位置的元素,但可读性和性能都不如第一种方案,优先推荐用zip打包的方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:03