2014-01-20 9 views
28

Ich mache eine einfache Login-App in Django 1.6 (und Python 2.7) und ich bekomme einen Fehler am Anfang, der mich nicht weitermachen lässt.Django NoReverseMatch

Dies ist die url.py Website

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)), 
) 

Und das ist 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'), 
) 

Dies ist login/Ansichten, 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') 

Ich habe ein Formular, das dies als Aktion hat:

{% url 'login:auth' %} 

Und das ist, wo das Problem ist, wenn ich versuche, die Seite zu laden, erhalte ich:

Reverse for 'auth' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'$auth/'] 

Aber wenn ich die URL-Muster zu

gesetzt
url(r'', views.auth, name='auth') 

es funktioniert gut, nur es legt die Aktion als '/' fest.

Ich habe rund um eine Antwort gesucht und ich verstehe nicht, warum es nicht funktioniert.

Ich habe versucht, das Login-URL-Muster zu url (r '^ Login/$', include ('Login.urls', Namespace = 'Login')), und es hat nichts geändert.

+0

Mögliche Duplikate von [Was ist ein NoReverseMatch-Fehler, und wie behebe ich es?] (Http://StackOverflow.com/questions/38390177/what-is-a-noreversematch-error-and-how-do- i-fix-it) – Sayse

Antwort

41

Das Problem liegt in der Art, wie Sie die Authentifizierungs-URLs in die Haupt-URL einschließen. Da Sie sowohl^als auch $ verwenden, stimmt nur die leere Zeichenfolge überein. Lass das $ fallen.

+6

Ich kann nicht glauben, dass es so einfach war, ich zog mir die Haare aus. Vielen Dank! – freakrho

+1

danke, diese Antwort erspart mir mindestens eine Stunde der Verzweiflung :) – maddob

+0

Sie sollten dies beheben oder eine bessere Fehlermeldung erstellen. Ich habe 20 Minuten damit verbracht herauszufinden, dass WTF falsch gelaufen ist. – DataMania