Django传递字符串参数到URL时出现NoReverseMatch错误如何解决
问题根因
- 核心触发点是你将URL路径参数命名为了
filter,这是Django模板系统的内置保留关键字,解析{% url %}模板标签时会和内置关键字发生冲突,导致路由名称解析异常,最终抛出找不到空字符串对应路由的NoReverseMatch错误。 - 次要排查方向:如果你的子应用
app中配置了app_name路由命名空间,调用{% url %}时未加命名空间前缀也会触发匹配错误,不过结合你给出的错误提示,参数名冲突的概率更高。
修复步骤
- 修改子应用路由配置,替换参数名为非保留关键字,比如
filter_type:
urlpatterns = [ path('dashboard/<str:filter_type>/', views.dashboard, name='dashboard'), ]
- 同步修改视图函数的入参名称,和路由参数保持一致:
@login_required def dashboard(request, filter_type): data = [] context = { 'title': 'Dashboard', 'records': data, } return render(request, 'app/common/dashboard.html', context)
- 如果你的子应用配置了
app_name(比如在app/urls.py顶部加了app_name = 'app'),需要同步修改模板中的路由调用写法,加上命名空间前缀:
href="{% url 'app:dashboard' 'create_time' %}"
如果没有配置命名空间,原来的模板写法不需要修改即可正常运行。
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

