django url resolvers反向查找

时间:2017-03-13 03:59:58

标签: django django-urls

NoReverseMatch

我正在尝试使用以下网址制作一个基本网站

/congregation/ - home page
/congregation/archives - archives for that page

有多个'会众',每个都有一个存档页面。

我有以下网址模式:

教会/ urls.py

urlpatterns = [
url(r'^admin/', admin.site.urls, name='admin'),
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
url(r'^', include('congregation.urls', namespace='congregation')),
]

教会/众/ urls.py

page_patterns = [
    url(r'^$', CongregationView.as_view(), name='home'),
    url(r'^archive/', SermonList.as_view(), name='archive')
]

urlpatterns = [
    url(r'^(?P<congregation>\w{3,20})/', include(page_patterns, namespace='page'))
]

页面按照我的预期显示,但如果我在标题导航栏中使用链接,反向查找将失败并显示此消息

NoReverseMatch at /spokane/archive/
Reverse for 'archive' with arguments '()' and keyword arguments '{}'    not found. 1 pattern(s) tried: ['(?P<congregation>\\w{3,20})/archive/']

错误是由模板

中的无效反向匹配引起的
<li class="{% if request.resolver_match.url_name == 'archives' %}active{% endif %}">
                <a href="{% url 'congregation:page:archive' %}">Archives</a></li>

我确信这很简单,但我很难找到解决方案。 谢谢!

1 个答案:

答案 0 :(得分:2)

您的网址模式url(r'^(?P<congregation>\w{3,20})/', include(page_patterns, namespace='page'))需要congregation个关键字。当您使用{% url 'congregation:page:archive' %}调用您的网址解析程序时,您没有提供会众关键字。

泰 - {% url 'congregation:page:archive' congregation=whatever %}