register - login url django



NoReverseMatch while rendering: Invertir para '' django.contrib.auth.views.login '' (2)

Estoy usando la autenticación de Django, y en la plantilla login.html, la siguiente declaración está generando un error:

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

TemplateSyntaxError at / login

Caught NoReverseMatch while rendering: Invertir para '' django.contrib.auth.views.login '' con argumentos '()' y argumentos de palabra clave '{}' no encontrados.

Esta url se define en mi urls.py:

(r'^login$', 'django.contrib.auth.views.login')

He instalado el sistema de autenticación:

INSTALLED_APPS = (
    'django.contrib.auth',
...
)

¿Algunas ideas?


Answer #1

A partir de Django 1.10:

A partir de Django 1.10, ya no es posible utilizar la cadena 'django.contrib.auth.views.login' en url() o la etiqueta {% url %} .

En primer lugar, cambie sus patrones de URL para usar el invocable y asígnele el nombre del patrón de url. Por ejemplo:

from django.contrib.auth import views as auth_views

url_patterns = [
    url(r'^login$', auth_views.login, name='login'),
]

Luego actualice su etiqueta url para usar el mismo nombre:

{% url 'login' %}

A partir de Django 1.5:

Ya no necesita {% load url from future %} , solo use la sintaxis entrecomillada ( {% url 'django.contrib.auth.views.login' %} ) y listo (consulte la publicación Django 1.5 notas ).

A partir de Django 1.3:

Tenga en cuenta que a partir de Django 1.3 (como señala Karen Tracey a below ), la forma correcta de corregir esto es agregar:

{% load url from future %}

en la parte superior de tu plantilla, y luego usa:

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

Antes de Django 1.3:

A juzgar por ese mensaje de error (fíjese en las dobles comillas simples alrededor de la ruta a la vista), supongo que la etiqueta {% url ... %} no desea las comillas, intente:

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

Answer #2

La sintaxis con comillas es nueva en Django 1.3. La forma correcta de corregir el error en 1.3 adelante sería incluir {% load url from future%} en la plantilla.