Я хочу змінити певний 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. Якщо ви цього не зробите, collestatic знайде спочатку адміністратор 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 замість адміністратора за замовчуванням.