首页 > 解决方案 > 向管理页面添加部分

问题描述

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

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

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

接下来,更大的事情是我需要修改原始的 views.py 文件来执行此操作。这肯定不是个好主意吗?在 Django Admin views.py 中四处寻找听起来是个糟糕的主意,让我觉得这种事情不应该做,但是在我放弃之前我仍然想确定一下。

我可以找到有关将视图添加到 Django Admin 的信息,但找不到将此类内容添加到管理首页的信息。

谢谢你。

标签: djangodjango-admindjango-notification

解决方案


这不会太难做到。

粗略的大纲,您需要使用自己的 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_template。这就是该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 docs中有明确的说明。

但是......总是值得考虑 django-admin 文档的前几行:

管理员推荐的使用仅限于组织的内部管理工具。它不是为了构建你的整个前端。

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

我会更进一步说它可能只应该由其他开发人员使用。其他人很容易引起大问题。因此,根据您要在此处添加这些通知的原因,这可能是也可能不是一件好事。

我希望这有帮助 :)


推荐阅读