将部分添加到管理页面

Adding A Section To Admin Page

我更改了我的管理页面的某些部分并尝试扩展模板(因此我设置并运行了文件结构)。我现在想更进一步。

我想在管理页面的 'recent activity' 列旁边添加一列,其中将列出管理员收到的所有最新 django-notifications

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

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

我可以找到有关将视图添加到 Django 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_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 class 注册为您的新管理员。 django docs.

中有明确的说明可以做到这一点

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

The admin’s recommended use is limited to an organization’s internal management tool. It’s not intended for building your entire front end around.

The admin has many hooks for customization, but beware of trying to use those hooks exclusively. If you need to provide a more process-centric interface that abstracts away the implementation details of database tables and fields, then it’s probably time to write your own views.

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

希望对您有所帮助:)