33 votes

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.

44voto

Daniel Roseman Points 199743

Vous ne montrez pas où vous essayez d'inverser cette URL, mais il semble que vous l'ayez citée en double. 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' %}
 

19voto

hynekcer Points 2265

Vous voyez qu' ''the.unknown.view'' est rapporté, y compris trop de qoutes.

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

{% load url from future %}

ce qui est valable aussi pour Django 1.5.


Exemple pour Django 1.5+

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

Syntaxe classique pour Django <= 1.4.x (sans "l'avenir de la commande") est:

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

6voto

MattoTodd Points 2849

Je voudrais donner votre url, un nom (dans l'ordre pour ce faire, vous devez utiliser la méthode d'url) vous devez Également ajouter une barre oblique à toutes vos urls, provoquer le django CommonMiddleware va faire une redirection 302 sur toutes vos urls si vous n'avez 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 le reverse dans votre code, ou l'url dans vos modèles, et si jamais vous décidez de changer l'url (c'est à dire: changedCotractManagement/login/), tant que le nom est le même, votre code sera toujours bon.

dans le code:

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

dans le modèle:

{% url contract_login %}

Edit: par MrOodles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X