我的 django 管理界面如下所示:
现在我想添加一个与模型不对应的 View 。
我可以覆盖上面页面的模板并添加自定义链接。但我认为这看起来很难看。
覆盖示例 admin/index.html
:
{% extends "admin/index.html" %}
{% block content %}
{{ block.super }}
<div class="app-sonstiges module">
....
</div>
{% endblock %}
但也许有一种官方方法可以向管理界面添加自定义 View ?
就我而言,我想提供一个可以执行
tcptraceroute
的表单到远程服务器。我的应用程序的管理员需要这个。我使用了相同的 html 标签。现在链接“tcptraceroute”看起来不错,但不幸的是消息向下移动:
有没有办法在屏幕截图中获得像“Sontiges ... tcptraceroute”这样的自定义部分,而无需向下移动最新操作?
这是html结构的样子。我的
<div class="app-sonstiges">
在内容主要下方:最佳答案
您在这里有 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
您还可以在向他们显示链接之前检查当前员工用户是否可以访问模块。
最后它看起来像这样:
关于django - 如何将自定义 View 添加到 django 管理界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254597/