web-dev-qa-db-ja.com

Django NoReverseMatch

Django 1.6(およびpython 2.7)で簡単なログインアプリを作成しています。開始時にエラーが発生し、続行できません。

これはサイトのurl.pyです

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

そして、これは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'),
)

これはlogin/views、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')

私はこれをアクションとして持っているフォームを持っています:

{% url 'login:auth' %}

そして、それは問題があるところです、私がページをロードしようとすると、私は得る:

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

しかし、URLパターンを

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

正常に動作し、アクションを「/」に設定するだけです。

私は答えを探していましたが、なぜ機能しないのか分かりません。

ログインURLパターンをurl(r '^ login/$'、include( 'login.urls'、namespace = 'login'))に変更してみましたが、何も変更されませんでした。

29
freakrho

問題は、メインURLに認証URLを含める方法にあります。 ^と$の両方を使用するため、空の文字列のみが一致します。 $をドロップします。

43
Daniel Roseman