【问题标题】:django logout() doesn't show templatedjango logout() 不显示模板
【发布时间】:2016-03-21 18:19:51
【问题描述】:

我正在使用 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 层来指向那个 url:

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

但它不起作用,它只会将我重定向到一个名为注销的完整空白页面,如果我返回浏览器,我仍然登录。

【问题讨论】:

  • template_name 不应该是一个列表,你也不需要那里的def logout_view(request):
  • mmm 也不起作用 =(
  • 在您的模板中,我看到您将body 块包含在&lt;head&gt;..&lt;/head&gt; 中。 body 必须在 head 之外。在您的 base_cost_control.html 中,您是否定义了一个名为 contentsubbase 的块?最后,没有真正将用户注销的逻辑,它只是现阶段的一个模板
  • 还可以查看docs.djangoproject.com/en/1.9/topics/auth/default/… 的文档,您可以使用内置视图和完整示例
  • 感谢大家的回答,但这不是问题....跟踪我发现函数 def logout_view(request): 它没有返回...我做错了什么??

标签: python django logout


【解决方案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 的文件夹,并将您的模板放在每个应用程序上对应于 app_name 的文件夹中

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

【讨论】:

  • 感谢您的回答,但这不是问题,我已经这样做了,所有其他模板都可以正常工作...。跟踪我发现函数 def logout_view(request): 它正在返回没有....我做错了什么??
【解决方案2】:

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 中。

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2011-11-02
    • 1970-01-01
    • 2017-02-15
    • 2016-12-13
    • 2020-08-03
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多