2013-06-02 114 views
2

我是Django的新手,并且在使用django.contrib.auth.login时遇到困难。在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错误。 我在做什么错? 谢谢。编号1: 我终于能够解决NoReverseMatch错误。谢谢。 虽然我仍然有问题。这是我更新的代码:

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

问题: 当我到达的页面,并点击 “登录” 我出现以下错误:

DoesNotExist在/帐号/登录/

所以,厕所ks为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') 
) 
+0

如果没有推荐的方法是可行的,尝试命名的网址,并从模板调用名为url – karthikr

回答

3

这有一些问题。首先,你试图在你的url中调用一个非视图函数。 “auth.login”是Django的身份验证的应用程序提供的登录功能,但:

“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' %} 
+0

这工作得到页面运行,谢谢!我仍然有这个问题:django.contrib.auth.views.login是一个视图应该为我提供基本的登录视图,并寻找模板registration/login.html。当我将它映射到r'^ accounts/login/$'时,它试图找到django.contrib.auth.views.login,这是我没有的视图,因为它是在Django内部开发的。所以,当我点击登录链接时,我会得到“DoesNotExist at/accounts/login /”。我应该如何安排它? – jazzblue

+0

我很抱歉,但我不明白你的问题。当你“映射它”时,它是什么,它是如何映射的?你是说你得到一个Template DoesNotExist错误?也许你可以提供一些代码? – cazgp

+0

嗨Cazgp,我刚刚添加了新的代码,并在问题中描述了我的问题。谢谢。 – jazzblue

3

你需要使用{% url %}.

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

时那么,要么使用URLNAME或路径,查看模板你可以这样说:

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

或者:

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

谢谢。我实际上已经尝试了最后一个选项:Login,但它仍然给出NoReverse错误。不知何故,它无法找到视图。 – jazzblue

+0

你可以尝试第一个选项 –

+0

我有一个不同的问题,如果你碰巧知道:django.contrib.auth.views.login是一个实现了基本登录机制的视图。我不知道它的URL是什么,为什么要把它放在urls.py中呢? – jazzblue