django logout()不显示模板

时间:2015-12-15 19:45:31

标签: python django logout

我使用Django函数登出并且它不会显示我的模板。这里的代码:

Views.py

class Logout(View):
    #import pdb; pdb.set_trace()
    template_name = ['cost_control_app/logout.html']

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name)

    def logout_view(request):
        logout(request)
        print ("ya")
        return render(request, self.template_name) 

Urls.py

urlpatterns = patterns(
    '',
    url(r'^logout/$', views.Logout.as_view(), name = "logout"),
)

模板:

logout.html

{% extends 'base_cost_control.html' %}
{% block contentsubbase %}

<head>
<body>
    <div>
        <h2> Logged out succefully </h2>
        <br>
        <a href="{% url 'cost_control_app:login' %}">Iniciar sesión</a>
    </div>
</body>
</head>

{% endblock contentsubbase %}

在我的主页面中使用href图层指向该网址:

<a href="{% url 'cost_control_app:logout' %}">Logout</a>

但它不能正常工作,它只会将我重定向到一个名为logout的完整空白页面,如果我在浏览器中返回,我仍然会登录。

2 个答案:

答案 0 :(得分:1)

  1. 将template_name定义为字符串

    template_name =“cost_control_app / logout.html”

  2. 您的模板应放在项目app_folder/templates/app_name

  3. 您还可以在settings.py中定义template_dirs,如下所示

    TEMPLATE_DIRS =(     os.path.join(BASE_DIR,'templates'), )

  4. 现在在项目中创建一个名为templates的文件夹,并将模板放在与app_name对应的文件夹中的每个应用上

    步骤3不是必需的,只是一个替代

答案 1 :(得分:0)

Django 3.1:如果不需要控制注销过程,可以让Django的标准认证系统来处理。无需编写视图或修改 urlpatterns,只需将用户定向到您在 GET 请求中指定的模板:

<a href="{% url 'logout' %}?next=myapp/mytemplates/logout.html">Logout now</a>

这假设您有默认设置(已安装应用程序中的“django.contrib.auth”,中间件中的“django.contrib.auth.middleware.AuthenticationMiddleware”和模板中的“django.contrib.auth.context_processors.auth”上下文处理器)在 settings.py 中。