Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将节添加到管理页_Django_Django Admin_Django Notification - Fatal编程技术网

Django 将节添加到管理页

Django 将节添加到管理页,django,django-admin,django-notification,Django,Django Admin,Django Notification,我更改了我的管理页面的某些部分,并扩展了模板(因此我已经设置好了文件结构并开始工作)。我现在想再进一步 我想在管理员页面上的“最近活动”列旁边添加一列,该列将列出管理员收到的所有最新活动 我猜我应该扩展base.html并在那里添加我的通知。我的第一个问题是这是最好的地方吗 下一个更大的问题是,我需要修改原始的views.py文件来实现这一点。这肯定不是个好主意?在Django Admin views.py中翻来覆去听起来是个糟糕的主意,让我觉得这类事情不应该做,但是在我放弃之前,我还是想确定一

我更改了我的管理页面的某些部分,并扩展了模板(因此我已经设置好了文件结构并开始工作)。我现在想再进一步

我想在管理员页面上的“最近活动”列旁边添加一列,该列将列出管理员收到的所有最新活动

我猜我应该扩展base.html并在那里添加我的通知。我的第一个问题是这是最好的地方吗

下一个更大的问题是,我需要修改原始的views.py文件来实现这一点。这肯定不是个好主意?在Django Admin views.py中翻来覆去听起来是个糟糕的主意,让我觉得这类事情不应该做,但是在我放弃之前,我还是想确定一下

我可以找到关于向Django Admin添加视图的信息,但是没有关于向Admin首页添加类似内容的信息


谢谢。

这不会太难做到

一个粗略的轮廓,您需要使用自己的AdminSite,并覆盖
index
方法(这是呈现主视图的方法)。大概是这样的:

from django.contrib import admin

class MyAdminSite(admin.AdminSite):

    index_template = "path/to/my_template.html"

    def index(self, request, extra_context=None):
        # do whatever extra logic you need to do here
        extra_context = ...   # this will be added to the template context
        return super().index(request, extra_context=extra_context)
注意,我还添加了一个新的索引模板。这就是
index
方法将用来呈现其响应的内容。所以我们最好把它设置好。我们将扩展旧的
index.html
,只需在需要的位中添加额外的代码

{% extends "admin/index.html" %}
{% block sidebar %}
{{ block.super }}    // this just includes everything that was there before
// add your extra html here
{% endblock %}
这应该可以做到:)所以,不,你真的不必去胡闹任何你不该做的事

您需要将
MyAdminSite
类注册为新管理员。手册中有明确的说明

但是。。。django管理文档中的前几行始终值得思考:

管理员建议的使用仅限于组织的内部管理工具。它不是用来构建整个前端的

管理员有许多用于定制的钩子,但是要注意不要试图专门使用这些钩子。如果您需要提供一个更以流程为中心的接口,以抽象出数据库表和字段的实现细节,那么现在可能是编写自己的视图的时候了

我会更进一步说,它可能只应该被其他开发人员使用。对其他人来说,造成重大问题远不是件容易的事。因此,根据您希望在此处添加这些通知的原因,这可能是一件好事,也可能不是一件好事


我希望这有帮助:)

非常感谢。你的指示很清楚,我相信我能让它工作。我只有一个问题,我想知道我应该把你的第一块代码放在哪里,
classmyadminsite
?这里也有很多知识,即使是
{{{block.super}}
标记对我来说是新的,并且给了我一些可以查看的东西。@Brenden非常欢迎:)这实际上是一个非常好的问题。一点也不清楚,所以谢谢你的后续问题。我对我的答案进行了编辑,添加了django文档的链接,该文档为特定步骤提供了一些非常清晰的说明。此外,是的,我花了一些时间了解了
block.super
,但它确实非常有用。扩展父模板并使用
{%block some_block%}
时,实际上覆盖了父模板中的整个块。大多数时候,这不是你想要的。通常情况下,您只需要包含一点额外的内容<代码>{{block.super}只是说,在父模板中包含此块中的所有内容,然后您可以编写额外的位。