Я хочу изменить некоторый css в admin django как base.css. Лучше ли меняться непосредственно в библиотеке django? Как я могу отменить его наилучшим образом?
Переопределение admin css в django
Ответ 1
Это зависит от того, что вы хотите сделать. Хотя прежде всего: не переписывайте его в администраторе 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',) }
Ответ 2
Я просто расширил admin/base.html, чтобы включить ссылку на мой собственный файл css - в конце. Красота css заключается в том, что вам не нужно касаться существующих определений, просто переопределите.
Ответ 3
Это решение будет работать для сайта администратора, я думаю, что это самый чистый способ, потому что он переопределяет 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
Это! ты сделал
Ответ 4
- В
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 %}
Ответ 5
В вашем статическом каталоге создайте static/admin/css/base.css
файл static/admin/css/base.css
.
Сначала вставьте Django по умолчанию Admin CSS, затем добавьте свои настройки внизу.
Ответ 6
Если вам нужна глобальная область действия, и вы не хотите думать о переопределении шаблонов, mixin отлично работает для этого. Поместите этот код везде, где хотите:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
Затем создайте файл CSS с именем admin.css
с вашими переопределениями, например:
select[multiple] {
resize: vertical;
}
Затем, в любых моделях, которые вы хотите, выполните:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
И все будет готово.
Ответ 7
Возможно, grappelli спасет вас от беспокойства...
https://github.com/sehmaschine/django-grappelli
http://lincolnloop.com/static/slides/2010-djangocon/customizing-the-admin.html#slide37
Ответ 8
У вас есть admin/css/changelists.css
внутри папки в STATICFILES_DIRS
, и он будет использовать это changelists.css вместо стандартного админа.