为什么Django模板调用带参数路径时出现URL反向解析报错?
问题原因
- 你的
urls.py中仅给无参数的根路径路由配置了name='home',带year和month参数的第二条路由没有配置对应的name属性 - Django做反向路由解析时,只能匹配到你命名为
home的无参数根路由,你传入两个参数后找不到对应匹配的路由规则,因此抛出报错。错误信息中提到的tried: ['$']也能佐证这一点,Django只尝试了匹配根路径规则。
解决方法
你可以任选以下两种方案之一修改:
方案1:给带参数的路由追加相同的name属性
Django支持同一个name对应多个路由规则,反向解析时会自动根据传入的参数匹配对应的路由:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name = 'home'), # 给带参数的路由也添加name='home' path('<int:year>/<str:month>/', views.home, name = 'home'), ]
修改完成后你原来的模板代码{% url 'home' '2021' 'November' %}就可以正常解析了。
方案2:给带参数的路由设置独立的name
如果你希望区分两个路由的调用场景,可以给带参数的路由单独命名,修改urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name = 'home'), # 给带参数的路由设置独立name path('<int:year>/<str:month>/', views.home, name = 'home_with_date'), ]
对应的模板代码修改为:
<li class="nav-item"> <a class="nav-link" href="{% url 'home_with_date' '2021' 'November' %}">November</a> </li>
内容的提问来源于stack exchange,提问作者Natalie Smyth
相关产品推荐
相关产品推荐

