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

如何在Django HTML模板中迭代URL列表生成url标签跳转链接

问题根因

你写的代码有三个核心语法问题,不符合Django模板的规则:

  • 模板语法不支持直接调用Python内置函数,enumerate()无法在模板中直接执行
  • Django模板原生不支持动态索引取值,category_links[idx]的写法无法被解析器识别
  • 原HTML代码存在标签语法错误,<a>和<div>的左尖括号缺失

方案1:视图层提前打包数据(最推荐)

符合Django「模板轻逻辑、视图处理数据」的设计规范,无需额外扩展功能:

  1. 调整视图代码,将分类名称列表和链接名称列表打包为元组后传递给模板:
# 你的视图函数代码
def home(request):
    # 你原有分类名称列表,顺序要和category_links一一对应
    categories = ["你实际的分类名称列表"]
    category_links = ['journals', 'proceedings', 'books', 'articles_in_books', 'talks', 'poster', 'habilitations', 'phd_thesis', 'bachelor_master_diploma_thesis', 'lectures', 'conferences', 'calls_and_awards', 'telegrams_and_circulars']
    # 打包两个列表为配对的元组列表
    category_pairs = list(zip(categories, category_links))
    return render(request, "你的模板路径.html", {"category_pairs": category_pairs})
  1. 模板直接遍历打包后的列表即可:
{% for category, link_name in category_pairs %}
    <div class="box">
        <a href="{% url link_name %}">{{ category }}</a>
    </div>
{% endfor %}

方案2:自定义模板过滤器实现动态索引(无需改视图)

如果不想调整视图层代码,可以自定义一个简单的过滤器支持按索引取列表值:

  1. 在你的应用目录下新建templatetags文件夹,创建两个文件:
    • 空文件__init__.py
    • custom_filters.py,写入如下代码:
from django import template

register = template.Library()

@register.filter
def index(lst, idx):
    return lst[idx]
  1. 模板顶部加载自定义过滤器,然后结合forloop.counter0遍历:
{% load custom_filters %}

{% for category in categories %}
    <div class="box">
        <a href="{% url category_links|index:forloop.counter0 %}">{{ category }}</a>
    </div>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:00