Подтвердить что ты не робот

Ошибка 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.

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

4b9b3361

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

Изменить: на каждый адрес.