如何在Django Admin中添加自定义菜单
在Django Admin中添加自定义菜单,需要进行如下步骤:
-
创建一个新的app,命名为“myadmin”。
-
在app的目录下创建一个名为“admin.py”的文件,在文件中添加如下代码:
from django.contrib import admin from django.urls import reverse from django.utils.html import format_html class MyAdminSite(admin.AdminSite): site_header = 'My Admin Site' site_title = 'My Admin Site' myadmin_site = MyAdminSite(name='myadmin') class MyMenuItem: def __init__(self, label, url_name, icon=None, order=None): self.label = label self.url_name = url_name self.icon = icon self.order = order def render(self, request): url = reverse(self.url_name, current_app=myadmin_site.name) if self.icon: html = '<i class="{}"></i> {}'.format(self.icon, self.label) else: html = self.label return format_html('<li><a href="{}">{}</a></li>', url, html) myadmin_site.index_template = 'admin/myadmin_index.html' myadmin_site.register(MyMenuItem)
- 在app的目录下创建一个名为“templates/admin/myadmin_index.html”的模板文件,在文件中添加如下代码:
{% extends "admin/index.html" %} {% block nav-global %} {{ block.super }} <h3>My Custom Menu</h3> <ul class="nav"> {% for item in site.get_urls %} {% if item.name == 'myadmin:myadmin_index' %} {% continue %} {% endif %} {% if item.name == 'logout' %} {% with item.url as logout_url %} {% if perms.admin %} {{ item.render }} {% endif %} {% endwith %} {% else %} {{ item.render }} {% endif %} {% endfor %} </ul> {% endblock %}
- 在项目的urls.py中添加如下路由,以注册MyAdminSite:
from myadmin.admin import myadmin_site urlpatterns = [ path('myadmin/', myadmin_site.urls), # ... ]
- 在需要添加自定义菜单的app的目录下创建一个名为“admin_menu.py”的文件,在文件中添加如下代码:
from myadmin.admin import MyMenuItem, myadmin_site class MyCustomMenuItem(MyMenuItem): def __init__(self): super().__init__( label='My Custom Menu Item', url_name='myadmin:my_custom_view', icon='fa fa-list', order=10 ) myadmin_site.register(MyCustomMenuItem())
- 在需要添加自定义菜单的app的目录下创建一个名为“views.py”的文件,在文件中添加如下代码:
from django.shortcuts import render def my_custom_view(request): return render(request, 'admin/my_custom_view.html', {})
- 在需要添加自定义菜单的app的目录下创建一个名为“templates/admin/my_custom_view.html”的模板文件,在文件中添加如下代码:
{% extends "admin/base_site.html" %} {% block content_title %} <h1>My Custom View</h1> {% endblock %} {% block content %} <p>Welcome to My Custom View!</p> {% endblock %}
这样,在Django Admin中就会显示一个名为“My Custom Menu Item”的菜单,点击后会跳转到“My Custom View”的页面。
相关文章