欢迎访问宙启技术站
智能推送

Django.contrib.admin.sites的样式定制教程

发布时间:2024-01-11 16:17:53

Django.contrib.admin.sites是Django框架自带的管理界面的核心模块,通过该模块,可以轻松地创建管理界面并与数据库进行交互。虽然Django提供了默认的管理界面风格,但有些时候我们可能希望根据自己的需求对管理界面样式进行定制化,本教程将介绍如何进行样式定制并提供一个使用例子。

1. 设置静态文件路径

首先,在Django的settings.py文件中设置静态文件路径。

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

2. 创建样式文件

在static目录下创建一个名为admin的文件夹,然后在其中创建一个名为css的文件夹,用于存放样式文件。例如,创建static/admin/css/style.css。

3. 编写样式文件

打开style.css文件,使用CSS语法编写自定义样式。例如,我们可以修改页面的背景颜色和标题颜色。

body {
    background-color: #f5f5f5;
}

h1 {
    color: #336699;
}

4. 加载样式文件

打开Django的admin.py文件,在其中导入StaticFileAdmin类和admin.site静态路径设置。

from django.contrib.admin import AdminSite, site
from django.contrib.admin.staticfiles import StaticFilesHandler
from django.conf import settings
from django.views.decorators.cache import never_cache

admin_site = AdminSite()


class MyAdminSite(AdminSite):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._registry.update(site._registry)

    @never_cache
    def index(self, request, extra_context=None):
        return super().index(request, extra_context)

    @never_cache
    def app_index(self, request, app_label, extra_context=None):
        return super().app_index(request, app_label, extra_context)


my_admin_site = MyAdminSite()


handler = StaticFilesHandler()

@never_cache
def media(request, path):
    """
    Map to serve admin media such as css/js in debug mode. This view is
    automatically namespaced by the django debug toolbar when attached, this
    keeps the internal implementation and URL names consistent.
    """
    return handler(request, path)

admin_site._registry.update(site._registry)

urlpatterns = [
    url(r'^admin/', include(admin_site.urls)),
    url(r'^my_admin/', include(my_admin_site.urls)),
    url(r'^media/(?P<path>.*)$', never_cache(media)),
]

5. 使用样式文件

在自定义的admin.py文件中,导入admin_site,并为需要定制样式的ModelAdmin类添加admin_site属性。

from django.contrib import admin
from django.contrib.admin.sites import AdminSite

from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    # 将ModelAdmin类注册到自定义的admin_site
    admin_site = my_admin_site

admin.site.register(MyModel, MyModelAdmin)

6. 运行项目

运行Django项目,访问自定义的管理界面,可以看到背景颜色和标题颜色已经按照样式文件进行定制。

以上就是通过定制Django.contrib.admin.sites样式的简单教程,希望对你有所帮助!