You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin索引页中为非模型工具添加链接

Django Admin 索引页添加自定义工具链接最优方案

不需要将工具抽离为独立app,最优方案是扩展Django Admin原生能力,仅通过少量代码即可实现和原生样式完全统一的工具模块,完全符合Django的设计规范。

实现步骤

1. 自定义Admin站点,注入工具链接上下文

在现有工具所属的app下新建admin_site.py,继承默认AdminSite重写索引方法,将你urls.py中定义的工具路由注入到模板上下文:

from django.contrib.admin import AdminSite
from django.urls import reverse

class CustomAdminSite(AdminSite):
    # 可保留原有Admin配置
    site_header = "后台管理系统"
    site_title = "后台管理"

    def index(self, request, extra_context=None):
        extra_context = extra_context or {}
        # 配置你的工具链接,路由直接复用原有urls.py的命名
        extra_context["custom_tools"] = [
            {
                "name": "向用户发送邮件",
                "url": reverse("your_app_name:send_mail"),
                "desc": "给指定用户分组发送通知邮件"
            },
            {
                "name": "生成嵌入代码",
                "url": reverse("your_app_name:gen_embed_code"),
                "desc": "生成外部网站可引入的嵌入片段"
            },
            # 剩余2-3个工具按同样格式添加即可
        ]
        return super().index(request, extra_context)

# 实例化自定义Admin站点
custom_admin = CustomAdminSite(name="custom_admin")

2. 替换原有模型注册逻辑

将你之前用默认admin.site.register注册的模型,全部改为用上面实例化的custom_admin.register注册。

3. 局部扩展Admin索引模板

在项目templates目录下新建admin/index.html,仅添加工具模块代码,其他完全复用原生模板逻辑,不需要全量重写:

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

{% block content %}
<!-- 自定义工具模块,样式和原生Admin完全一致 -->
<div class="module">
    <table>
        <caption>
            <span class="section">实用工具</span>
        </caption>
        {% for tool in custom_tools %}
        <tr>
            <th scope="row"><a href="{{ tool.url }}">{{ tool.name }}</a></th>
            <td>{{ tool.desc }}</td>
            <td></td>
        </tr>
        {% endfor %}
    </table>
</div>
<!-- 渲染原生Admin原有内容 -->
{{ block.super }}
{% endblock %}

4. 替换根路由中的Admin配置

修改项目根urls.py,用自定义Admin站点替换默认的Admin路由:

from django.urls import path
from your_app_name.admin_site import custom_admin

urlpatterns = [
    # 替换原来的 path('admin/', admin.site.urls)
    path('admin/', custom_admin.urls),
    # 其他原有路由配置不变
]

方案优势

  • 完全符合Django扩展规范,不需要硬编码URL,所有工具路由还是复用原有app的urls.py配置
  • 工具模块样式和原生Admin完全统一,和你预期的示例效果一致
  • 维护成本极低,后续新增工具只需要在上下文配置中加条目即可
  • 支持灵活的权限控制,你可以在注入custom_tools时加用户权限判断,仅对有权限的用户展示对应工具

内容的提问来源于stack exchange,提问作者Matt Andrews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:03:02