【问题标题】:Adding A Section To Admin Page向管理页面添加部分
【发布时间】:2020-06-04 11:45:41
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: django django-admin django-notification


    【解决方案1】:

    这不会太难做到。

    一个粗略的大纲,您需要使用自己的 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 文档的前几行:

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

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

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

    我希望这会有所帮助:)

    【讨论】:

    • 非常感谢。你的指示很清楚,我相信我可以让它工作。我只有一个问题,我想知道我应该把你的第一个代码块放在哪里,class MyAdminSite?这里也有很多学习,即使只是 {{ block.super }} 标签对我来说是新的,并且给了我一些可以研究的东西。
    • @Brenden 不客气 :) 这实际上是一个非常好的问题。根本不清楚,所以感谢您的后续问题。我已经编辑了我的答案以包含指向 django 文档的链接,该链接为该特定步骤提供了一些非常清晰的说明。
    • 另外,是的,我花了一段时间才了解block.super,但它确实非常有用。当您扩展父模板并使用 {% block some_block %} 时,您实际上会覆盖父模板的整个块。大多数时候这不是你想要的。通常你只想包括一点额外的东西。 {{ block.super }} 只是说,在此处的父模板中包含此块中的所有内容,然后您可以编写额外的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多