2

我是 Django 新手,在使用 django.contrib.auth.login 时遇到困难。

我的 urls.py:

from django.conf.urls import patterns, include, url
from myapp import views
from django.contrib import auth

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^accounts/', include('accounts.urls')),
    url(r'^accounts/login/$', auth.login)
)

现在,当我尝试在模板中使用 url

<a href="{% url 'accounts/login' %}?next={{request.path}}">Login</a>

我收到 NoReverseMatch 错误。我究竟做错了什么?谢谢。

EDIT1:我终于能够解决 NoReverseMatch 错误。谢谢。不过我还是有问题。这是我更新的代码:

网址.py:

from django.conf.urls import patterns, include, url

from myapp import views
from django.contrib.auth.views import login

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^accounts/', include('accounts.urls')),   
    url(r'^accounts/login/$', login)
)

我的模板 index.html:

<a href="{% url 'django.contrib.auth.views.login' %}?next={{request.path}}">Login</a>

问题:当我获取页面并单击“登录”时,出现以下错误:

不存在于 /accounts/login/

因此,它在 accounts/login/ 中查找视图,而我没有登录视图,因为 django.contrib.auth.views.login 应该为我提供视图。我应该如何修改我的 urls.py?还是有其他方法可以解决?谢谢。

编辑2:

我的帐户/urls.py:

from django.conf.urls import patterns, url

from accounts import views

urlpatterns = patterns('',
    url(r'^register/$', views.register, name='register')
)
4

3 回答 3

3

使用时需要使用 urlname 或要查看的路径{% url %}.

url(r'^accounts/login/$', auth.views.login, name='account_login')

所以,在模板中你可以说:

<a href="{% url 'account_login' %}?next={{request.path}}">Login</a>

或者:

<a href="{% url 'django.contrib.auth.views.login' %}?next={{request.path}}">Login</a
于 2013-06-02T09:07:31.773 回答
3

这有一些问题。首先,您尝试在您的网址中调用非视图函数。“auth.login”是django auth app提供的登录功能,但是:

“auth.views.login”是您要调用的视图函数,因此:

from django.contrib.auth.views import login

...
    url(r'^accounts/login/$', login),

每当您的某个观点出现问题时,反向将不起作用(我将尝试找到相关的文档)。

其次,您正在尝试反转 URL 路径。Reverse 将获取视图的名称或 URL 名称并返回相应的 URL。如果您将 URL 更改为指向视图(如上所述),akshar 的答案应该是正确的:

{% url 'django.contrib.auth.views.login' %}
于 2013-06-02T09:58:11.933 回答
0

Django 2+ 的更新

这现在有效:

from django.contrib.auth.views import LoginView
...
path('accounts/login/', LoginView, name='login'),

那么你可以使用:

{% url 'login' %}
于 2019-08-07T21:33:21.037 回答