Ошибка NoReverseMatch - PullRequest
       2

Ошибка NoReverseMatch

33 голосов
/ 13 февраля 2011

Я получаю эту ошибку для системы входа в систему 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 ]

44 голосов
/ 13 февраля 2011

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

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

не

{% url 'django.contrib.auth.views.login' %}
19 голосов
/ 06 апреля 2012

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

Это потому, что цитируемый синтаксис будет действителен в 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"): </p>

{% url path.to.some.view %}
6 голосов
/ 13 февраля 2011

Я бы дал вашему 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 (то есть: updatedCotractManagement / login /), при условии, что имя совпадает, ваш код будет будь хорошим.

в коде:

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

в шаблоне:

{% url contract_login %}

Редактировать: за MrOodles

...