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

Django web应用登出时跳转到admin后台登出页面如何解决?

问题根因

你遇到的问题是Django版本差异导致的,Django 3.1及以上版本对默认的登出视图做了关键调整,和教程用的2.2版本规则不兼容:默认LogoutView仅支持POST请求,GET请求会直接返回Django内置的admin风格登出页面,不会加载自定义模板。

修复步骤

1. 修改登出触发方式为POST请求

你当前用<a>标签触发的是GET请求,不符合3.2版本的要求,修改base.html里的登出代码为表单提交即可保持原有视觉效果,同时符合请求规则:

{% if user.is_authenticated %}
  Hello, {{ user.username }}.
  <form action="{% url 'users:logout' %}" method="post" style="display: inline;">
    {% csrf_token %}
    <button type="submit" style="background: none; border: none; color: #007bff; text-decoration: underline; cursor: pointer;">Log out</button>
  </form>
{% else %}

2. 确认模板存放路径

你的logout.html需要放在users应用下的templates/registration/目录中,完整路径为:你的项目根目录/users/templates/registration/logout.html。Django默认的认证视图会优先从registration目录下查找对应模板,你已经把users应用放在INSTALLED_APPS的最前面,优先级高于Django内置的admin应用,路径正确的情况下会优先加载你自定义的登出模板。

可选方案:显式指定登出视图配置

如果需要自定义更多登出逻辑,可以在users/urls.py中显式声明登出路由,覆盖默认配置:

from django.contrib.auth import views as auth_views
from django.urls import path, include

app_name = 'users'
urlpatterns = [
    # 显式指定登出视图的模板,优先级高于默认配置
    path('logout/', auth_views.LogoutView.as_view(template_name='registration/logout.html'), name='logout'),
    path('', include('django.contrib.auth.urls')),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:18:01