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

如何在HTML标签属性中使用Django模板变量?维基克隆项目遇NoReverseMatch报错

解决Django NoReverseMatch错误:维基百科克隆项目的URL路由问题

错误原因

你在{% url %}标签里错误嵌套了模板变量的{{ }}语法:

<a href="{% url 'encyclopedia:{{entry}}'%}">

Django会把{{entry}}当成字面量的视图/URL模式名称,而不是解析变量值,所以找不到对应的路由,抛出NoReverseMatch错误。

正确写法

1. 模板中的URL标签修改

去掉变量的双大括号,直接传入变量名,同时确保URL模式名称正确:

<a href="{% url 'encyclopedia:entry' entry %}">

这里的encyclopedia:entry是你在应用urls.py中定义的URL模式名称,后面的entry是模板中传递的变量值。

2. 配置对应URL路由(encyclopedia/urls.py)

需要定义一个带参数的URL模式,接收页面名称参数:

from django.urls import path
from . import views

app_name = 'encyclopedia'  # 确保已设置应用命名空间

urlpatterns = [
    # 其他路由(比如首页)
    path('', views.index, name='index'),
    # 维基页面路由:接收字符串类型的页面标题参数
    path('wiki/<str:title>/', views.entry_detail, name='entry'),
]
  • name='entry'对应模板中encyclopedia:entry的模式名称
  • <str:title>是路径参数,会将模板变量entry的值传递给视图函数

3. 编写对应视图函数(encyclopedia/views.py)

接收路由传递的title参数,获取并返回对应维基页面内容:

def entry_detail(request, title):
    # 示例:根据标题获取页面内容(替换成你实际的逻辑,比如从文件/数据库读取)
    entry_content = load_entry(title)  # 假设你有这个加载内容的函数
    if entry_content:
        return render(request, 'encyclopedia/entry.html', {
            'entry': entry_content,
            'title': title
        })
    # 页面不存在时的处理
    return render(request, 'encyclopedia/entry_not_found.html')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:24