NoReverseMatch при использовании {% url%} в Django - PullRequest
2 голосов
/ 24 ноября 2010

Я слежу за книгой (Практические Django Projects 2nd Ed.), И я столкнулся с ошибкой, которую не могу понять.

Я получаю эту ошибку: TemplateSyntaxError at / weblog /

Поймано NoReverseMatch при рендеринге: обратное для 'coltrane_category_list' с аргументами '()' и ключевыми словами-аргументами '{}' не найдено.

Вот код в моем шаблоне, который использует {% url%}:

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

Вот моя конфигурация URL:

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 Ответ

7 голосов
/ 24 ноября 2010

Вы должны использовать функцию url на вашем патенте, чтобы правильно зарегистрировать имя этого паттерна. См. Документацию Django по именованию шаблонов URL .

.

В основном измените ваши шаблоны на:

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= в качестве именованного аргумента, но я всегда предпочитаю, потому что это более явно для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...