覆盖Django admin中的注销链接

时间:2017-06-23 12:23:35

标签: django

有没有办法覆盖Django管理页面上的log out链接?我试图在用户退出时删除cookie。

4 个答案:

答案 0 :(得分:4)

你有两种方法可以做到这一点,

  1. 糟糕的方式:
  2. 转到python包目录,在django/contrib/admin/templates/admin中找到django-admin模板。在这里,您将找到带有注销链接的base.html文件(在我的第44行),并在所有项目中永久更改django admin。

    1. 好方法:
    2. 您可以通过将特定的django-admin模板放在像templates/admin/[app-name]/[template-name]这样的层次结构的模板目录中来覆盖它们。这将仅限于应用程序,并且更好。详细了解相同的here

      希望这有帮助!

答案 1 :(得分:3)

覆盖Django管理员主页的最佳方法是覆盖管理员模板。制作您自己的管理模板目录并在那里创建一个base.html文件。 我相信你试图覆盖退出的链接。您需要重新编写 userlinks 块。我不会谈论javascript部分,但你可以写下你的base.html,如下所示。

{% 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 %}

答案 2 :(得分:0)

您还可以通过覆盖date_default_timezone_set("Australia/Sydney"); $time = '2020-08-19 13:04:53'; $date = date('Y-m-d H:i:s', $time); 中的URL路径来避免完全修改模板代码。只需在管理员网址前 之前包含替代内容即可,

urls.py

此示例使用重定向到预期注销URL路径的方法,但是您也可以直接引用预期注销视图。我认为重定向方法更加干燥。

从那里,只需将cookie删除逻辑放在注销视图中即可:

# 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)
  ...
]

答案 3 :(得分:0)

自 OP 以来,Django 经历了一些版本更改,但在截至此评论的当前版本 (Django-3.2) 中,您可以通过在设置中添加:LOGOUT_REDIRECT_URL = '/your_desired_url/' 来完成更改注销重定向。 py 文件在你的主项目中

我对 Django 和 Python 还很陌生,但它按预期通过了我的单元测试和功能