在Django中使用{%url%}时的NoReverseMatch

时间:2010-11-24 01:15:58

标签: django django-templates

我正在读一本书(Practical Django Projects 2nd Ed。),我遇到了一个我无法弄清楚的错误。

我收到此错误: / weblog /

中的TemplateSyntaxError
  

渲染时捕获NoReverseMatch:反向'coltrane_category_list',参数'()'和关键字参数'{}'未找到。

以下是我的模板中使用{%url%}的代码:

    <li id="main-nav-entries">
        <a href="{% url coltrane_entry_archive_index %}">Entries</a>
    </li>

以下是我的网址配置:

entry_info_dict = {
    'queryset': Entry.objects.all(),
    'date_field': 'pub_date',
}

urlpatterns = patterns('django.views.generic.date_based',
    (r'^$', 'archive_index', entry_info_dict, 'coltrane_entry_archive_index'),
    (r'^(?P<year>\d{4})/$', 'archive_year', entry_info_dict, 'coltrane_entry_archive_year'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, 'coltrane_entry_archive_month'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', 'archive_day', entry_info_dict, 'coltrane_entry_archive_day'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', 'object_detail', entry_info_dict, 'coltrane_entry_detail'),
)

错误是什么意思?我没有给它足够的论据吗? {%url%}如何运作?根据我的理解,它将查看URL配置并查找匹配的关键字,并根据URL配置中的匹配关键字返回URL。

1 个答案:

答案 0 :(得分:7)

您必须使用模式上的url功能才能正确注册该模式的名称。请参阅Django documentation on naming url patterns

基本上,将您的模式更改为:

urlpatterns = patterns('django.views.generic.date_based',
    url(r'^$', 'archive_index', entry_info_dict, name='coltrane_entry_archive_index'),
    url(r'^(?P<year>\d{4})/$', 'archive_year', entry_info_dict, name='coltrane_entry_archive_year'),
    url(r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, name='coltrane_entry_archive_month'),
    url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', 'archive_day', entry_info_dict, name='coltrane_entry_archive_day'),
    url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$', 'object_detail', entry_info_dict, name='coltrane_entry_detail'),
)

我认为它可以在不使用name=作为命名arg的情况下工作,但我总是喜欢,因为它对我更明确。