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

如何在Django Admin面板内添加可点击的自定义路由

在Django Admin侧边栏添加自定义路由的实现方案

下面提供两种实用的实现方式,你可以根据需求选择:

前提准备

先确保你的自定义视图已配置好路由并添加权限验证:

  1. 在项目/应用的urls.py中配置路由:
from django.urls import path
from .views import my_custom_view

urlpatterns = [
    # 其他路由...
    path('my-view/', my_custom_view, name='my-custom-view'),
]
  1. 给自定义视图添加Admin权限控制(确保只有后台用户能访问):
from django.contrib.admin.views.decorators import staff_member_required
from django.shortcuts import render

@staff_member_required
def my_custom_view(request):
    # 你的视图逻辑代码
    return render(request, 'my_view.html', {})

方法一:直接扩展Admin模板(快速实现)

适合只添加少量自定义链接的场景:

  1. 在项目根目录的templates文件夹下创建admin目录,新建base_site.html文件:
{% extends "admin/base_site.html" %}

{% block nav-sidebar %}
    {{ block.super }}
    <!-- 插入自定义侧边栏模块 -->
    <div class="module">
        <h2>自定义工具</h2>
        <ul class="actionlist">
            <li>
                <a href="{% url 'my-custom-view' %}" class="icon-link">我的自定义视图</a>
            </li>
        </ul>
    </div>
{% endblock %}

注:如果你的Django版本低于4.0,将nav-sidebar替换为sidebar即可。

  1. 启动服务后,登录Admin就能在侧边栏看到新增的链接。

方法二:自定义AdminSite(灵活扩展)

适合需要批量管理多个自定义链接、后续有扩展需求的场景:

  1. 在应用的admin.py中定义自定义AdminSite:
from django.contrib.admin import AdminSite
from django.urls import reverse

class CustomAdminSite(AdminSite):
    def each_context(self, request):
        context = super().each_context(request)
        # 批量添加自定义链接
        context['custom_links'] = [
            {
                'name': '我的自定义视图',
                'url': reverse('my-custom-view'),
                'icon': 'icon-link'
            },
            # 可以继续添加更多链接
        ]
        return context

# 实例化自定义AdminSite
admin_site = CustomAdminSite(name='custom_admin')

# 将你的模型注册到自定义AdminSite(替代原有的admin.site.register)
from .models import YourModel1, YourModel2
admin_site.register(YourModel1)
admin_site.register(YourModel2)
  1. 修改项目根目录的urls.py,替换默认的Admin路由:
from django.urls import path
from your_app.admin import admin_site

urlpatterns = [
    # 注释掉原有的默认Admin路由
    # path('admin/', admin.site.urls),
    path('admin/', admin_site.urls),
    # 其他路由...
]
  1. 新建templates/admin/sidebar.html文件,渲染自定义链接:
{% extends "admin/sidebar.html" %}

{% block nav-sidebar %}
    {{ block.super }}
    {% if custom_links %}
        <div class="module">
            <h2>自定义工具</h2>
            <ul class="actionlist">
                {% for link in custom_links %}
                    <li>
                        <a href="{{ link.url }}" class="{{ link.icon }}">{{ link.name }}</a>
                    </li>
                {% endfor %}
            </ul>
        </div>
    {% endif %}
{% endblock %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:01:07