Ошибка 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.
Я не понимаю, почему я получаю эту ошибку. Если вам нужно что-нибудь еще, дайте мне знать.
Ответы
Ответ 1
Вы не показываете, где вы пытаетесь отменить этот URL-адрес, но похоже, что вы его дважды указали. Если вы используете тег url
, обратите внимание, что вам не нужны кавычки вокруг имени URL:
{% url django.contrib.auth.views.login %}
не
{% url 'django.contrib.auth.views.login' %}
Ответ 2
Вы видите, что ''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 <= 1.4.x(без команды "future" ):
{% url path.to.some.view %}
Ответ 3
Я бы дал вашему 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'),
)
Затем вы можете использовать обратное в своем коде или URL-адрес в своих шаблонах, и если вы когда-нибудь захотите изменить фактический URL-адрес (т.е. changedCotractManagement/login/), если имя будет одинаковым, ваш код будет по-прежнему быть хорошим.
в коде:
from django.core.urlresolvers import reverse
reverse('contract_login')
в шаблоне:
{% url contract_login %}
Изменить: на каждый адрес.