You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django用户管理问题:登出跳转404页面,无法正常退出登录

Django登出失败(accounts/logout页面不存在)问题排查与解决

核心问题原因

你遇到的问题主要来自两个点:

  1. Django内置LogoutView的请求要求:默认情况下,django.contrib.auth的登出视图(LogoutView)更推荐用POST请求触发登出操作。如果你的登出按钮是普通<a>标签(GET请求),Django会尝试渲染登出确认页面,但这个页面的模板需要手动创建,否则就会报“页面不存在”。
  2. 缺少登出模板:LoginView有默认的模板匹配逻辑,但LogoutView对应的registration/logged_out.html模板需要自行创建,未创建时会出现模板缺失错误。

解决方案

方案一:用POST请求触发登出(推荐,更安全)

把登出按钮改成表单提交方式,避免直接用GET请求访问登出接口:

<form method="post" action="{% url 'logout' %}">
  {% csrf_token %}
  <button type="submit">登出</button>
</form>

如果希望登出后直接跳转到首页或指定页面,可以在应用的urls.py中给LogoutView指定next_page参数:

from django.contrib.auth.views import LogoutView

# 放在include auth urls之前,确保优先匹配
path("accounts/logout/", LogoutView.as_view(next_page="/"), name="logout"),
path("accounts/", include("django.contrib.auth.urls")),

这样登出后会直接跳转到首页,无需额外创建模板。

方案二:创建登出确认模板

如果坚持用GET请求触发登出,可在应用的templates/registration目录下创建logged_out.html模板,示例内容:

<!DOCTYPE html>
<html>
<head>
    <title>已登出</title>
</head>
<body>
    <h1>成功登出</h1>
    <p><a href="{% url 'login' %}">点击重新登录</a></p>
</body>
</html>

创建完成后,访问accounts/logout时就会显示这个页面,完成登出流程。

补充说明

登录正常是因为你按照教程创建了registration/login.html模板,Django的LoginView会自动识别该模板;但登出对应的模板没有默认提供,必须手动创建或通过POST请求跳过模板渲染。

内容的提问来源于stack exchange,提问作者DiklaS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:06