2016-12-05 98 views
1

我试图从模板调用注销网址,然后重定向到主页。注销在Django中不起作用

profile.html:

<li><a data-hover="Logout" href="{% url 'signout' %}">Logout</a></li> 

urls.py:

urlpatterns = [ 
    url(r'^$', views.login, name='login'), 
    url(r'^ajax/validate_username/$', views.validate_username, name='validate_username'), 
    url(r'^signout$', views.signout, name='signout'), 
] 

views.py:

def signout(request): 
    if request.user.is_authenticated(): 
     logout(request) 
     return HttpResponsePermanentRedirect('/') 
    else: 
     return HttpResponsePermanentRedirect('/') 

有时signout功能不能正常工作,同时点击退出菜单(函数签名正在调用)。

+0

是什么“不工作”是什么意思?视图中的断点会受到影响吗?你注销了吗?你有什么错误吗? – Sayse

+0

它未被注销并且没有错误。正在加载相同的页面,同时点击注销菜单。点击菜单时,它会调用函数(注销)并重定向到主页,但该函数没有调用。 – Ayan

回答

6

也许,你应该使用HttpResponseRedirect而不是HttpResponsePermanentRedirect。因为永久重定向可以使用缓存,如果您打算始终运行signout,则不需要缓存。你

也可以做signout这样的:

from django.contrib.auth import views as auth_views 

urlpatterns = [ 
    ... 
    url(r'^signout/$', auth_views.logout, {'next_page': 'home'}, name='signout'), 
    ... 
] 
+0

谢谢,它使用url'localhost:8000'。但是,如果我使用url'127.0.0.1:8000',注销不起作用,而不是重定向到相同的woking页面。我可以知道原因吗? – Ayan

+0

永远不会遇到127.0.0.1和localhost之间的区别。可能你已经在缓存中保存了一些URL。清理缓存并重复您的请求。 – Fomalhaut

0

您可以使用下面的代码,它将工作。

URL(R '^ signout/$', 'django.contrib.auth.views.logout', { 'next_page': '/登录/'},名称= 'signout')