我想在 Django 管理员中更改某些 CSS,例如 base.css
。是直接更改 Django 库更好呢?最佳的覆盖方式是什么?
我想在 Django 管理员中更改某些 CSS,例如 base.css
。是直接更改 Django 库更好呢?最佳的覆盖方式是什么?
django/contrib/admin/templates/admin/base.html中覆盖类似于{% block extrastyle %}{% endblock %}
的块。
2. 如果你的样式是针对特定模型的,你可以通过admin.py
中的Media
元类添加附加样式。请参见此处的示例:
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
settings.py
中,确保你的应用程序在INSTALLED_APPS
中先于admin被列出。(your-app)/templates/admin/base_site.html
并将<style>
块放入{% block extrahead %}
中。{% extends "admin/base_site.html" %}
{% block extrahead %}
<style>
.field-__str__ {
font-family: Consolas, monospace;
}
</style>
{% endblock %}
我认为这个解决方案适用于管理员网站,这是最清晰的方式,因为它覆盖了base_site.html
,而在升级Django时不会更改。
在您的模板目录中创建一个名为admin
的文件夹,在其中创建一个名为base_site.html
的文件。
在您的静态目录下创建一个名为admin-extra.css
的文件,位于css
目录下。
在其中编写所有您想要用于表单的自定义CSS,例如:body{background: #000;}
。
将以下内容粘贴到base_site.html
中:
{% extends "admin/base.html" %}
{% load static from staticfiles %} # This might be just {% load static %} in your ENV
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "css/admin-extra.css" %}" />{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
如评论中所述:确保你的应用在INSTALLED_APPS中排在admin应用之前,否则你的模板将无法覆盖django的
就是这样了!完成了。
INSTALLED_APPS
中排在管理应用程序之前,否则您的模板将无法覆盖Django的模板。 - Dirbaiobase_site.html
模板不会改变呢?(我的意思是,虽然这个答案已经有三年了,但并不能保证它仍然适用) - Marv我刚刚扩展了 admin/base.html 文件,以包含对我的自定义 CSS 文件的引用 - 放在最后。CSS 的美妙之处在于您不必修改现有的定义,只需重新定义即可。
static/admin/css/base.css
文件。首先粘贴Django默认的管理界面CSS,然后在底部添加自定义内容。django.contrib.admin
之前。否则,collectstatic将首先找到管理员的base.css文件,你的自定义版本将无法覆盖它。 - Daveclass CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
接下来,制作一个名为admin.css
的CSS文件,并在其中添加你需要覆盖的样式,例如:
select[multiple] {
resize: vertical;
}
然后,无论你想要的模型是什么,都要执行以下操作:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
你将一切准备就绪。
将admin/css/changelists.css
放在STATICFILES_DIRS
文件夹中,它将使用该changelists.css
代替默认的管理员样式表。
你可以在Django后台中覆盖base.css
。
例如,如下所示存在一个Person
模型:
# "app1/models.py"
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
Person
管理员:# "app1/admin.py"
from django.contrib import admin
from .models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
pass
然后,下面显示了Person
管理员:
然后,将 django/contrib/admin/static/admin/css/base.css
中的 base.css 复制到您的虚拟环境下的 static/admin/app1/css/
,如下所示:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-static
└-admin
└-app1
└-css
└-base.css # Here
base.css
中,将background: var(--header-bg);
替换为background: black;
,如下所示,在Person
管理页面中将标题颜色更改为黑色:/* "static/admin/app1/css/base.css" */
#header {
width: auto;
height: auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 40px;
/* background: var(--header-bg); */
background: black;
color: var(--header-color);
overflow: hidden;
}
css
,如下所示:# "app1/admin.py"
from django.contrib import admin
from .models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
class Media:
css = { # ↓ ↓ ↓ ↓ ↓ ↓ Here ↓ ↓ ↓ ↓ ↓ ↓
"all": ("admin/app1/css/base.css",)
}
然后,如下所示,在 Person
管理页面中将标题颜色更改为黑色:
Animal
管理界面中,标题颜色没有变成黑色。
接下来,我将解释如何在所有管理页面中将页眉颜色更改为黑色。/django/contrib/admin/templates/admin/base.html
的base.html复制到/templates/admin/base.html
,如下所示:django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
|-static
| └-admin
| └-app1
| └-css
| └-base.css # Here
└-templates
└-admin
└-base.html # Here
base.html
中,将admin/css/base.css
替换为admin/app1/css/base.css
在{% static %}中:# "templates/admin/base.html"
# ...
<title>{% block title %}{% endblock %}</title>
{# <link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}"> #}
{# ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ Here ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ #}
<link rel="stylesheet" href="{% static "admin/app1/css/base.css" %}"> {# ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ Here ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ #}
{% block dark-mode-vars %}
#...
Person
和Animal
管理员中将标题颜色更改为黑色:
碰巧我在想要覆盖CSS时,将<style>
标签放在{% block extrastyle %}{% endblock %}
内部并没有起作用。主题支持提供了正确的方法。我所忽略的就是{{ block.super }}
:-
{% extends 'admin/base.html' %}
{% block extrastyle %}{{ block.super }}
<style>
--- your style ---
--- properties here ---
</style>
{% endblock %}