Django反向匹配失败

30

我正在使用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')

我有一个表单,其中action属性是这样的:

{% 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')),但什么也没变。


2个回答

43

问题出在你在主网址中包含认证URL的方式上。 因为你同时使用 ^ 和 $,只有空字符串能匹配。删除 $ 即可。


6
我简直不敢相信这是那么容易的,我都快抓狂了。谢谢你! - freakrho
1
谢谢,这个答案至少让我省去了一小时的绝望 :) - maddob
他们应该修复这个问题或者提供更好的错误提示信息。我已经花了20分钟来尝试弄清楚到底出了什么问题。 - NullPumpkinException

0

我有一个 HTML 锚标签:<a href="{% url 'url-name' url=someUUID %}">

在我的 urls.py 文件中。

...

path('some_name/<slug:slug>/', views.someDetailView.as_view(), name='url-name'),

...

解决方案:

使用以下代码之一:<a href="{% url 'url-name' someUUID %}">

或者:<a href="{% url 'url-name' slug=someUUID %}">

不要使用:<a href="{% url 'url-name' url=someUUID %}">

DetailView 使用 slug_field = 'someUUIDField'


由于某种原因,我写成了url而不是slug。现在它可以工作了。
也许你也写错了,确保你使用slug=,如果你使用<slug:slug>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接