Je crée une application de connexion simple dans Django 1.6 (et python 2.7) et j'obtiens une erreur au début qui ne me laisse pas continuer).
Ceci est l'url.py du site
from Django.conf.urls import patterns, include, url
from Django.contrib import admin
import login
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', include('login.urls', namespace='login')),
url(r'^admin/', include(admin.site.urls)),
)
Et voici login/urls.py:
from Django.conf.urls import patterns, url
from login import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^auth/', views.auth, name='auth'),
)
Ceci est la connexion/vues, py
from Django.shortcuts import render
from Django.contrib.auth import authenticate
def auth(request):
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
# the password verified for the user
if user.is_active:
msg = "User is valid, active and authenticated"
else:
msg = "The password is valid, but the account has been disabled!"
else:
# the authentication system was unable to verify the username and password
msg = "The username and password were incorrect."
return render(request, 'login/authenticate.html', {'MESSAGE': msg})
def index(request):
return render(request, 'login/login_form.html')
J'ai un formulaire qui a ceci comme action:
{% url 'login:auth' %}
Et c'est là que réside le problème, lorsque j'essaie de charger la page, j'obtiens:
Reverse for 'auth' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'$auth/']
Mais si je mets le modèle d'URL à
url(r'', views.auth, name='auth')
cela fonctionne bien, seulement il définit l'action comme '/'.
J'ai cherché une réponse tout autour et je ne comprends pas pourquoi cela ne fonctionne pas.
J'ai essayé de changer le modèle d'URL de connexion en url (r '^ login/$', include ('login.urls', namespace = 'login')), et cela n'a rien changé.
Le problème réside dans la façon dont vous incluez les URL d'authentification dans la principale. Parce que vous utilisez à la fois ^ et $, seule la chaîne vide correspond. Déposez le $.