tarantino - django tutorial
django-no hay coincidencia inversa para la vista de inicio de sesiĆ³n (5)
Solo estoy probando django y siguiendo la documentación para la autenticación.
Básicamente, quiero echar un vistazo a la página del formulario de inicio de sesión de usuario, pero recibo:
Caught NoReverseMatch while rendering: Reverse for ''''django.contrib.auth.views.login'''' with arguments ''()'' and keyword arguments ''{}'' not found.
Mi archivo urls.py:
from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('''',
url(r''^accounts/login/$'', ''django.contrib.auth.views.login''),
)
Mi configuración.py (INSTALLED_APPS)
INSTALLED_APPS = (
''django.contrib.auth'',
''django.contrib.contenttypes'',
''django.contrib.sessions'',
''django.contrib.sites'',
''django.contrib.messages'',
''django.contrib.staticfiles'',
)
EDITAR: Me di cuenta de que estaba mirando lo que está mal. El error se produce en el archivo de plantilla:
{% if form.errors %}
<p>Your username and password didn''t match. Please try again.</p>
{% endif %}
<form method="post" action="{% url ''django.contrib.auth.views.login'' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
Específicamente para la línea:
<form method="post" action="{% url ''django.contrib.auth.views.login'' %}">
En mi opinión, un mejor archivo urls.py (para ser limpio y aún muy explícito), también actualizado para Django 1.10 sería:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r''^accounts/login/$'', auth_views.login, name=''login'')
]
Y en la plantilla:
<form method="post" action="{% url ''login'' %}">
Tenga en cuenta que la url
ahora requiere una cadena por lo que el ''login''
en la plantilla debe estar entre comillas.
Esto tiene que ver con el espacio de nombres en las direcciones URL de sus aplicaciones en el archivo project / urls.py. Una solución es eliminar el espacio de nombres y escribir cada url explícitamente, pero para este problema en particular ...
Esto debería funcionar :
<form method="post" action="{% url ''<namespace_name>:django.contrib.auth.views.login'' %}">
Intente agregar name = ''login'' como palabra clave en la url
url(r''^accounts/login/$'', ''django.contrib.auth.views.login'', name=''login''),
y luego llamando al revés (''login'').
Intente establecer el nombre para la URL y utilícelo en la etiqueta de la URL
url(r''^accounts/login/$'', ''django.contrib.auth.views.login'', name=''login''),
y en plantilla:
<form method="post" action="{% url ''login'' %}">
Prueba esto:
url(r''^accounts/login$'', ''django.contrib.auth.views.login''),
Y después de su edición:
<form method="post" action="{% url django.contrib.auth.views.login %}">
EDITAR en el archivo settings.py
de django, esta línea:
APPEND_SLASH = False
le dice si su url inversa termina con barra o no. Entonces
APPEND_SLASH = True
url(r''^accounts/login/'', ''django.contrib.auth.views.login'')
Debería funcionar también.