有没有办法覆盖Django管理页面上的注销
链接?我试图在用户注销时删除cookie。
您还可以通过在urls.py
中覆盖URL路径来完全避免修改模板代码。只需在管理员URL之前包含覆盖,例如:
# project/urls.py
from django.urls import include, path
from django.shortcuts import redirect
from django.contrib import admin
# import logout view
from app.views import logout_view
urlpatterns = [
...
path('logout/', logout_view, name='logout'),
# note the override comes before the admin URLs below
path('admin/logout/', lambda request: redirect('/logout/', permanent=False)),
path('admin/', admin.site.urls)
...
]
# app/views.py
from django.shortcuts import redirect
from django.contrib.auth import logout
def logout_view(request):
logout(request)
response = redirect('/home')
response.delete_cookie('example_cookie')
return response
自从原帖发表以来,Django已经经历了几次版本更改,但在本评论发布时的最新版本(Django-3.2)中,您可以通过在主项目的settings.py文件中添加:LOGOUT_REDIRECT_URL = '/your_desired_url/'
来实现更改注销后的重定向地址。
我对Django和Python都比较陌生,但它通过了我的单元测试并且按预期运行。
django/contrib/admin/templates/admin
中。在这里,你会找到base.html
文件和注销链接(在我的文件中是第44行),并永久更改所有项目中的Django管理页面。templates/admin/[app-name]/[template-name]
的层次结构中来覆盖它们。这将仅限于该应用程序,并且效果更好。在这里了解更多相关信息:here。{% extends "admin/base.html" %}
{% load i18n %}
{% block extrahead %}
// write your js script here, may be on click of the logout link or whatever.
{% endblock %}
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
{% endif %}
<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
<a href="{% url 'admin:logout' %}" id="yourlogoutid">{% trans 'Log out' %} </a>
{% endblock %}