我使用Django登录和注销功能,登录功能正常,但注销无效。
在我的HTML文件中,我有:
<a href="{% url 'django.contrib.auth.views.logout' %}">logout</a>
<a href="{% url 'django.contrib.auth.views.login' %}">login</a>
在我的urls.py文件中:
url(r'^$', 'django.contrib.auth.views.login', {
'template_name': 'blog/login.html'
}),
url(r'^$', 'django.contrib.auth.views.logout', {
'template_name': 'blog/logout.html'
}),
当我登录时,它完全正常,我可以显示登录的人的姓名。但是当我退出时,我仍然登录,因为登录用户的名字仍然显示在横幅区域。
在我的HTML文件中我有:
{% if user.is_authenticated %}
{{ user }}
{% endif %}
如果注销功能有效,则不应显示用户名。所以我假设它不起作用。
什么似乎是问题,任何帮助/方向将不胜感激。
提前致谢,
答案 0 :(得分:2)
这里有几个问题。
首先,对于登录和注销视图,您具有完全相同的URL模式('^$'
)。这意味着第二个(注销)模式将永远不会被使用,因为第一个模式始终匹配。当您尝试注销时,匹配的第一个视图是登录视图,因此您永远无法注销。
将其更改为:
from django.contrib.auth import views as auth_views
url(r'^login/$', auth_views.login, {
'template_name': 'blog/login.html'
}, name='login'),
url(r'^logout/$', auth_views.logout, {
'template_name': 'blog/logout.html'
}, name='logout'),
(参见documentation on using the authentication views。)
然后在您的模板中,您需要使用他们的名称(我在上面添加)来引用网址:
<a href="{% url 'logout' %}">logout</a>
<a href="{% url 'login' %}">login</a>
您当前的方法(将虚线路径传递给URL函数)已经deprecated since Django 1.8并在Django 1.10中删除了,因此您应该停止使用它。
答案 1 :(得分:1)
试试这个:
{% if request.user.is_authenticated %}
Hello {{ request.user.username }}.
{% else %}
Hello Guest
{% endif %}
答案 2 :(得分:0)
还要确保您的应用程序设置位于INSTALLED_APPS下settings.py文件中的Django默认应用程序之前,否则您的注销模板将不会呈现,而将显示Django默认注销页面。