django - 如何将自定义 View 添加到 django 管理界面?

标签 django django-admin

我的 django 管理界面如下所示:

django-admin

现在我想添加一个与模型不对应的 View 。

我可以覆盖上面页面的模板并添加自定义链接。但我认为这看起来很难看。

覆盖示例 admin/index.html :

{% extends "admin/index.html" %}

{% block content %}

{{ block.super }}
<div class="app-sonstiges module">
   ....
</div>
{% endblock %}

但也许有一种官方方法可以向管理界面添加自定义 View ?

就我而言,我想提供一个可以执行 tcptraceroute 的表单到远程服务器。我的应用程序的管理员需要这个。

我使用了相同的 html 标签。现在链接“tcptraceroute”看起来不错,但不幸的是消息向下移动:

newest-actions-moved-down

有没有办法在屏幕截图中获得像“Sontiges ... tcptraceroute”这样的自定义部分,而无需向下移动最新操作?

这是html结构的样子。我的 <div class="app-sonstiges">在内容主要下方:

my-part-after-content-main

最佳答案

您在这里有 3 个选项:

使用提供菜单的第三方包

这很简单,有一些很好的软件包支持管理员菜单,以及一些将您的项目添加到菜单的方法。

第 3 方软件包的示例是 django-admin-tools .缺点是有点难学。另一种选择是使用 django-adminplus但在撰写本文时,它不支持 Django 2.2。

使用 django 管理模板进行黑客攻击

您始终可以扩展管理模板并覆盖您想要的部分,如@Sardorbek 回答中所述,您可以从管理模板中复制一些部分并以您想要的方式更改它们。

使用自定义管理站点

如果您的 View 应该只在管理站点上起作用,那么您可以扩展 adminsite (也许 change the default ),除了添加到模板的链接之外,您应该使用这种方法来定义您的仅管理员 View ,因为它更容易检查这种方式的权限。

考虑到您已经扩展了 adminsite,现在您可以使用以前的方法将链接添加到模板,甚至可以扩展 get_app_list方法,示例:

class MyAdminSite(admin.AdminSite):
    def get_app_list(self, request):
        app_list = super().get_app_list(request)
        app_list += [
            {
                "name": "My Custom App",
                "app_label": "my_test_app",
                # "app_url": "/admin/test_view",
                "models": [
                    {
                        "name": "tcptraceroute",
                        "object_name": "tcptraceroute",
                        "admin_url": "/admin/test_view",
                        "view_only": True,
                    }
                ],
            }
        ]
        return app_list

您还可以在向他们显示链接之前检查当前员工用户是否可以访问模块。
最后它看起来像这样:
enter image description here

关于django - 如何将自定义 View 添加到 django 管理界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254597/

相关文章:

django - Django管理员以表格形式编辑字段

django - Django session : sometimes session information is erased 的棘手问题

django - 如果记录存在则预填充表单

python - DRF始终返回 "Authentication credentials were not provided"

django - 在 Django admin 上保存模型后上传文件

python - Django 管理员 : use checkboxes in list view in list_filter()

python - 如何在 Django Admin 中更改 ForeignKey 显示文本?

django-nose 单元测试 celery 任务...缺少数据库数据

python - Django SQLite 在测试时试图覆盖数据库

django - 向 Django 管理站点添加忘记密码功能