如何为多个Django AdminSite配置不同主题?
实现独立AdminSite的差异化主题配置
完全可行,核心思路是利用Django AdminSite的可定制性,让自定义子类AdminSite加载第三方主题模板,默认AdminSite保留原生样式。以下是两种主流方案的具体实现:
方案一:用Jazzmin快速实现(推荐)
Jazzmin本身提供了封装好的AdminSite子类,直接继承即可实现主题替换:
- 安装Jazzmin
pip install django-jazzmin
- 创建自定义AdminSite子类,继承Jazzmin的AdminSite
# 在项目的admin.py中 from jazzmin.admin import JazzminAdminSite class CustomJazzminAdmin(JazzminAdminSite): site_header = "Jazzmin自定义后台" site_title = "Jazzmin管理系统" # 可根据Jazzmin文档配置更多自定义选项,比如侧边栏、配色等 # 实例化自定义AdminSite custom_jazzmin_admin = CustomJazzminAdmin(name='jazzmin_admin')
- 注册模型到这个自定义AdminSite
# 示例:注册User模型 from django.contrib.auth.models import User from django.contrib.auth.admin import UserAdmin custom_jazzmin_admin.register(User, UserAdmin)
- 配置urls.py,区分两个AdminSite的访问路径
from django.contrib import admin from .admin import custom_jazzmin_admin urlpatterns = [ path('admin/', admin.site.urls), # 原生主题 path('admin-jazzmin/', custom_jazzmin_admin.urls), # Jazzmin主题 ]
方案二:用AdminLTE(django-adminlte-3)手动配置
如果偏好AdminLTE,需要为自定义AdminSite指定全套适配的模板:
- 安装django-adminlte-3
pip install django-adminlte-3
- 创建自定义AdminSite子类,重写模板属性
# 在项目的admin.py中 from django.contrib.admin import AdminSite class CustomAdminLTEAdmin(AdminSite): site_header = "AdminLTE自定义后台" # 指定AdminLTE的核心模板,覆盖原生模板 base_template = 'adminlte/base.html' index_template = 'adminlte/index.html' change_list_template = 'adminlte/change_list.html' change_form_template = 'adminlte/change_form.html' login_template = 'adminlte/login.html' logout_template = 'adminlte/logout.html' # 实例化自定义AdminSite custom_adminlte_admin = CustomAdminLTEAdmin(name='adminlte_admin')
- 注册模型到该AdminSite(同方案一)
- 配置urls.py,添加访问路径
from django.contrib import admin from .admin import custom_adminlte_admin urlpatterns = [ path('admin/', admin.site.urls), # 原生主题 path('admin-lte/', custom_adminlte_admin.urls), # AdminLTE主题 ]
- 确保
adminlte已加入INSTALLED_APPS
# settings.py INSTALLED_APPS = [ # ... 'adminlte', 'django.contrib.admin', # ... ]
关键注意事项
- 不要修改全局
ADMIN_SITE设置,否则会替换默认AdminSite的主题 - 第三方主题必须是适配Django Admin的版本(比如上述两个库),否则会出现只显示模板框架、不加载模型数据的问题
- 若需要更精细的模板定制,可在项目templates目录下创建对应主题的模板文件,覆盖第三方库的默认模板
内容的提问来源于stack exchange,提问作者Dhrions
相关产品推荐
相关产品推荐

