NoReverseMatch lors du rendu: inverse pour « » django.contrib.auth.views.login « »
-
14-10-2019 - |
Question
J'utilise l'authentification de Django, et dans le modèle login.html, l'instruction suivante génère une erreur:
{% url 'django.contrib.auth.views.login' %}
TemplateSyntaxError à / login
Pris NoReverseMatch lors du rendu. Inverse pour '' django.contrib.auth.views.login '' avec des arguments '()' et arguments mot-clé '{}' not found
Cette URL est définie dans mon urls.py:
(r'^login$', 'django.contrib.auth.views.login')
J'ai installé le système auth:
INSTALLED_APPS = (
'django.contrib.auth',
...
)
Toutes les idées?
La solution
Comme de Django 1.10:
de Django 1.10, il est plus possible d'utiliser le 'django.contrib.auth.views.login'
de chaîne dans url()
ou la balise {% url %}
.
D'abord, changer vos habitudes URL pour utiliser le appelable, et nommez le modèle d'URL. Par exemple:
from django.contrib.auth import views as auth_views
url_patterns = [
url(r'^login$', auth_views.login, name='login'),
]
Ensuite, mettre à jour votre balise URL pour utiliser le même nom:
{% url 'login' %}
Comme de Django 1.5:
Vous n'avez pas besoin {% load url from future %}
plus, il suffit d'utiliser la syntaxe cité (de {% url 'django.contrib.auth.views.login' %}
) et vous avez terminé (voir le Django 1.5 notes de version ).
Comme de Django 1.3:
Notez que comme de Django 1.3 (comme points Karen Tracey ci-dessous ), la bonne façon de résoudre ce problème est d'ajouter:
{% load url from future %}
en haut de votre modèle, puis utilisez:
{% url 'django.contrib.auth.views.login' %}
Avant Django 1.3:
A en juger par ce message d'erreur (notez le double guillemets simples autour du chemin de la vue), je suppose que le {% url ... %}
tag ne veut pas de guillemets, essayez:
{% url django.contrib.auth.views.login %}
Autres conseils
La syntaxe avec des guillemets est nouveau dans Django 1.3. La bonne façon de corriger l'erreur sur 1.3 avant serait à incldue {% url de charge de future%} dans le modèle.