web-dev-qa-db-fra.com

Django NoReverseMatch

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é.

29
freakrho

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 $.

43
Daniel Roseman