Django访问/polls/top/触发NoReverseMatch错误:'polls'未注册命名空间
解决Django NoReverseMatch: 'polls' is not a registered namespace错误
这个问题我之前也碰到过,本质是Django找不到你指定的polls URL命名空间,只要补全两处配置就能解决:
1. 给子应用polls的urls.py添加命名空间声明
打开polls/urls.py,首先要指定app_name(这是子应用的命名空间标识),同时补全你的URL规则(你原来的代码没写完,我帮你补全了必要的部分):
from django.conf.urls import url from django.conf import settings from django.conf.urls.static import static from . import views # 导入你的视图函数 # 关键:设置子应用的命名空间名称 app_name = 'polls' urlpatterns = [ # 匹配/polls/top/路径,关联top视图,设置name方便反向解析 url(r'^top/$', views.top, name='top'), # 匹配/polls/detail/路径,关联detail视图 url(r'^detail/$', views.detail, name='detail'), ] # 如果需要静态文件/媒体文件的路由,保留你原来的配置 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
2. 在父应用mysite的urls.py中注册命名空间
打开mysite/urls.py,在include子应用URL的时候,明确指定namespace='polls',这样Django才能把这个命名空间全局注册:
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # 关键:include时指定namespace,和子应用的app_name对应 url(r'^polls/', include('polls.urls', namespace='polls')), ]
额外检查:模板中的反向URL写法
如果你在模板(比如index.html或detail.html)里用了反向解析URL,要确保写法是{% url 'polls:top' %}这种命名空间+URL名称的格式,而不是直接写{% url 'top' %},这样Django才能正确找到对应的路由。
内容的提问来源于stack exchange,提问作者user9341676
相关产品推荐
相关产品推荐

