web-dev-qa-db-fra.com

Erreur NoReverseMatch

Je reçois toujours cette erreur pour le système de connexion Django. Voici une partie de mon urls.py:

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

L'erreur exacte que j'obtiens:

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

Je ne comprends pas pourquoi j'obtiens cette erreur. Si vous avez besoin d'autre chose, faites le moi savoir.

33
Dean

Vous ne montrez pas où vous essayez d'inverser cette URL, mais il semble que vous l'ayez entre guillemets. Si vous utilisez la balise url, notez que vous n'avez pas besoin de guillemets autour du nom de l'URL:

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

ne pas

{% url 'Django.contrib.auth.views.login' %}
44
Daniel Roseman

Tu vois ça ''the.unknown.view'' est signalé avec trop de qoutes.

C'est parce que la syntaxe citée sera valide dans Django 1.5 et plus. Pour Django 1.3 ou 1.4, vous devez activer le comportement futur de cette ligne dans le modèle:

{% load url from future %}

qui est également valable pour Django 1.5.


Exemple pour Django 1.5+

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

La syntaxe classique pour Django <= 1.4.x (sans commande "future") est:

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

Je donnerais un nom à votre URL (pour ce faire, vous devez utiliser la méthode url) Vous devez également ajouter une barre oblique à toutes vos URL, car le Django CommonMiddleware va faites une redirection 302 sur toutes vos URL si vous ne le faites pas:

from Django.conf.urls.defaults import *

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

)

Ensuite, vous pouvez utiliser reverse dans votre code, ou url dans vos modèles, et si vous décidez de changer l'URL réelle (par exemple: changedCotractManagement/login /), tant que le nom est le même, votre code sera toujours bon.

dans du code:

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

dans le modèle:

{% url contract_login %}

Modifier: par MrOodles

6
MattoTodd