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

Django模板遍历多列表问题:模板无内容显示

问题原因

Django模板语言不支持直接调用Python内置函数(比如zip()),所以你在模板中写的{%for a, b in zip(l1, l2)%}是无效语法,导致模板无法渲染出内容。

解决方法

这里提供两种常用的解决思路:

方法一:在视图中提前合并列表

直接在views.py中将需要遍历的列表用zip()合并好,再传递给模板:

修改后的views.py代码:

def exa(request):
    list1 = ["apple", "banana", "cherry"]
    list2 = [1, 5, 7]
    list3 = [True, False, False]
    # 合并list1和list2
    zipped_lists = zip(list1, list2)
    context = {
        'l1': list1,
        'l2': list2,
        'l3': list3,
        'zipped': zipped_lists
    }
    return render(request, 'patient_registration/111.html', context)

对应的模板代码:

{% for a, b in zipped %}
  {{a}} {{b}}<br>
{% endfor %}

这种方法简单直接,适合只需要在单个视图中处理的场景。

方法二:自定义模板过滤器

如果需要在多个模板中频繁使用列表合并的功能,可以自定义一个模板过滤器:

  1. 在你的Django应用目录下创建templatetags文件夹,里面新建两个文件:__init__.py(空文件即可)和custom_filters.py。

  2. 在custom_filters.py中编写过滤器代码:

from django import template

register = template.Library()

@register.filter(name='zip')
def zip_lists(list_a, list_b):
    return zip(list_a, list_b)
  1. 在模板中先加载自定义过滤器,再使用:
{% load custom_filters %}

{% for a, b in l1|zip:l2 %}
  {{a}} {{b}}<br>
{% endfor %}

如果需要合并两个以上的列表,可以修改过滤器函数来接受更多参数,或者链式使用过滤器(不过链式适合少数情况)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:40:54