Ошибка NoReverseMatch

Я продолжаю получать эту ошибку для системы входа django. Вот часть моей urls.py:

     (r'^contractManagement/login', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),

точная ошибка, которую я получаю:

Exception Type: NoReverseMatch
Exception Value:    Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found.

Я не могу понять, почему я получаю эту ошибку. Если вам что-нибудь понадобится, дайте мне знать.

3 ответов


вы не показываете, где вы пытаетесь изменить этот URL, но похоже, что вы дважды процитировали его. Если вы используете url тег, обратите внимание, что вам не нужны кавычки вокруг URL-адрес:

{% url django.contrib.auth.views.login %}

не

{% url 'django.contrib.auth.views.login' %}

вы видите, что ''the.unknown.view'' сообщается, включая слишком много qoutes.

потому что цитирует синтаксис будет действителен в Django 1.5 и выше. Для Django 1.3 или 1.4 вы должны активировать будущее поведение этой строкой в шаблоне:

{% load url from future %}

, который действителен также для Django 1.5.


пример для Django 1.5+

{% url "path.to.some.view" %}

классический синтаксис для Django

{% url path.to.some.view %}

Я бы дал вашему url-адресу имя (для этого вам нужно использовать метод url), также вы должны добавить конечную косую черту ко всем вашим URL-адресам, потому что django CommonMiddleware будет делать перенаправление 302 на все ваши URL-адреса, если вы этого не сделаете:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
     url(r'^contractManagement/login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='contract_login'),

)

затем вы можете использовать reverse в своем коде или url-адрес в своих шаблонах, и если вы когда-либо решите изменить фактический url-адрес (т. е.: changedCotractManagement / login/), пока имя то же самое, ваш код все равно будет хороший.

в коде:

from django.core.urlresolvers import reverse
reverse('contract_login')

в шаблоне:

{% url contract_login %}

Edit: per MrOodles