Admin django'da base.css gibi bazı css'leri değiştirmek istiyorum. Doğrudan django kitaplığında değiştirmek daha mı iyi? Bunu en iyi şekilde nasıl geçersiz kılabilirim?
Admin django'da base.css gibi bazı css'leri değiştirmek istiyorum. Doğrudan django kitaplığında değiştirmek daha mı iyi? Bunu en iyi şekilde nasıl geçersiz kılabilirim?
Yanıtlar:
Ne yapmak istediğinize bağlı. Her şeyden önce: doğrudan Django yöneticisinde üzerine yazmayın. Makul olduğunu düşündüğüm iki seçeneğiniz var:
{% block extrastyle %}{% endblock %}
de django/contrib/admin/templates/admin/base.html
bir örnek olarak.Media
Gözlerinde farklı meta sınıfında admin.py
. Burada bir örneğe bakın:
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
settings.py
, uygulamanızın içinde yöneticiden önce listelendiğinden emin olun INSTALLED_APPS
.(your-app)/templates/admin/base_site.html
ve<style>
{% block extrahead %}
Misal:
{% extends "admin/base_site.html" %}
{% block extrahead %}
<style>
.field-__str__ {
font-family: Consolas, monospace;
}
</style>
{% endblock %}
Sonunda kendi css dosyama bir referans eklemek için admin / base.html'yi genişlettim. Css'nin güzelliği, mevcut tanımlara dokunmanıza gerek kalmaması, sadece yeniden tanımlamanızdır.
Bu çözüm yönetici sitesi için işe yarayacak, bunun en temiz yol olduğunu düşünüyorum çünkü base_site.html
django'yu yükseltirken değişmeyen şeyi geçersiz kılıyor .
Şablonlar dizininizde, adı verilen bir klasör admin
oluşturun, adlı bir dosya oluşturun base_site.html
.
Altında statik dizinde oluşturun css
adında bir dosyaya admin-extra.css
.
İçinde sen gibi formlar için istediğiniz tüm özel css yazın: body{background: #000;}
.
Bunu şuraya yapıştırın 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 %}
Yorumlarda belirtildiği gibi: Uygulamanızın INSTALLED_APPS içindeki yönetici uygulamasından önce olduğundan emin olun, aksi takdirde şablonunuz django'yu geçersiz kılmaz
Bu kadar! sen bittin
INSTALLED_APPS
, aksi takdirde şablonunuz django'yu geçersiz kılmaz.
base_site.html
Django'yu yükseltirken bunun asla değişmeyeceğini nereden biliyorsun ? (Ben kötü mü evet bu cevabı 3 yaşında ve hala çalışır ama hiçbir garantuee var)
Statik dizininizde bir static/admin/css/base.css
dosya oluşturun.
Önce Django'nun varsayılan Admin CSS'sine yapıştırın , ardından özelleştirmelerinizi en alta ekleyin.
django.contrib.admin
listesine koyduğunuzdan emin olun INSTALLED_APPS
. Bunu yapmazsanız, collecstatic önce admin base.css dosyasını bulur ve özelleştirilmiş sürümünüz onun üzerine yazmaz.
Küresel bir kapsam istiyorsanız ve şablonları geçersiz kılmayı düşünmek istemiyorsanız, bir mixin bunun için gerçekten işe yarar. Bu kodu istediğiniz yere koyun:
class CSSAdminMixin(object):
class Media:
css = {
'all': ('css/admin.css',),
}
Ardından, admin.css
geçersiz kılmalarınızla çağrılan bir CSS dosyası oluşturun , örneğin:
select[multiple] {
resize: vertical;
}
Ardından, istediğiniz modelde şunları yapın:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
Ve her şey hazır olacak.
admin/css/changelists.css
İçinde bir klasör var STATICFILES_DIRS
ve varsayılan yönetici yerine changelists.css'yi kullanacak.