Я хочу изменить определенный css в админке django, например base.css. Лучше менять прямо в библиотеке django? Как я могу отменить это наилучшим образом?
Я хочу изменить определенный css в админке django, например base.css. Лучше менять прямо в библиотеке django? Как я могу отменить это наилучшим образом?
Ответы:
Это во многом зависит от того, чем вы хотите заниматься. Хотя прежде всего: не перезаписывайте его напрямую в админке 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',)
}
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 %}
Я просто расширил admin / base.html, включив ссылку на мой собственный файл css - в конце. Прелесть css в том, что вам не нужно касаться существующих определений, просто заново определите.
Это решение будет работать для сайта администратора, я думаю, что это самый чистый способ, потому что он переопределяет 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 %}
Как упоминалось в комментариях: убедитесь, что ваше приложение находится перед приложением администратора в INSTALLED_APPS, иначе ваш шаблон не переопределяет django
Это оно! ты закончил
INSTALLED_APPS
, иначе ваш шаблон не переопределяет шаблон django.
base_site.html
это никогда не изменится при обновлении django? (Я имею в виду, что да, этому ответу 3 года, и он все еще работает, но это не гарант)
В своем статическом каталоге создайте static/admin/css/base.css
файл.
Сначала вставьте стандартный CSS-код администратора Django , а затем добавьте свои настройки внизу.
django.contrib.admin
в список INSTALLED_APPS
. Если вы этого не сделаете, collectstatic сначала найдет admin base.css, и ваша настроенная версия не перезапишет его.
Если вам нужна глобальная область видимости и вы не хотите думать о переопределении шаблонов, для этого очень хорошо подходит миксин. Поместите этот код где хотите:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
Затем создайте файл CSS admin.css
с вашими переопределениями, например:
select[multiple] {
resize: vertical;
}
Затем в любых моделях выполните:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
И все будет готово.
Имейте admin/css/changelists.css
внутри папку STATICFILES_DIRS
, и он будет использовать этот файл changelists.css вместо административного по умолчанию.