Подтвердить что ты не робот

Переопределение admin css в django

Я хочу изменить некоторый css в admin django как base.css. Лучше ли меняться непосредственно в библиотеке django? Как я могу отменить его наилучшим образом?

4b9b3361

Ответ 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):

И все будет готово.

Ответ 8

У вас есть admin/css/changelists.css внутри папки в STATICFILES_DIRS, и он будет использовать это changelists.css вместо стандартного админа.