我想更改admin django中的某些css,如base.css。在django库中直接更改会更好吗?如何以最佳方式覆盖它?
答案 0 :(得分:89)
这很大程度上取决于你想做什么。虽然首先:不要直接在Django管理员中覆盖它。你认为两种选择是合理的:
{% block extrastyle %}{% endblock %}
中django/contrib/admin/templates/admin/base.html
之类的块作为示例。Media
中的admin.py
元类添加其他样式。请参阅此处的示例:class MyModelAdmin(admin.ModelAdmin): class Media: js = ('js/admin/my_own_admin.js',) css = { 'all': ('css/admin/my_own_admin.css',) }
答案 1 :(得分:24)
我只是扩展了admin / base.html以包含对我自己的css文件的引用 - 最后。 css的美妙之处在于您无需触及现有定义,只需重新定义即可。
答案 2 :(得分:17)
此解决方案适用于管理网站,我认为这是最干净的方式,因为它会覆盖base_site.html
,在升级django时不会发生变化。
在模板目录中创建一个名为admin
的文件夹,创建一个名为base_site.html
的文件。
在css
下的静态目录中创建一个名为admin-extra.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 %}
那就是它!你已经完成了
答案 3 :(得分:16)
settings.py
中,确保您的应用在INSTALLED_APPS
之前列在管理员之前。(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 %}
答案 4 :(得分:13)
在静态目录中,创建一个static/admin/css/base.css
文件。
先粘贴Django's default Admin CSS,然后根据需要进行调整。
答案 5 :(得分:5)
如果你想要一个全局范围并且你不想考虑重写模板,那么mixin对此非常有用。将此代码放在任何您想要的位置:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
然后,使用覆盖创建一个名为admin.css
的CSS文件,例如:
select[multiple] {
resize: vertical;
}
然后,无论你想要什么型号,都可以:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
你会全力以赴。
答案 6 :(得分:3)
将admin/css/changelists.css
放在STATICFILES_DIRS
中的文件夹中,它将使用changelists.css而不是默认的管理员。
答案 7 :(得分:0)
如果给定的字符串是模型的方法、ModelAdmin 或可调用的,Django 将默认对输出进行 HTML 转义。要转义用户输入并允许您自己的未转义标签,请使用 format_html()。
这是一个完整的示例模型:
from django.contrib import admin
from django.db import models
from django.utils.html import format_html
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6)
@admin.display
def colored_name(self):
return format_html(
'<span style="color: #{};">{} {}</span>',
self.color_code,
self.first_name,
self.last_name,
)
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name')
答案 8 :(得分:0)
更好的选择是覆盖 HTML
在您的模板中创建一个文件夹 admin,然后您可以在那里创建 base.html
{% extends 'admin/base.html' %}
{% block extrahead %}{{ block.super }}
<style>
:root {
--primary: #9774d5;
--secondary: #785cab;
--link-fg: #7c449b;
--link-selected-fg: #8f5bb2;
}
</style>
{% endblock %}