Saya tidak dapat menemukan satu jawaban atau satu bagian dalam dokumen resmi Django yang memiliki semuanya informasi yang saya butuhkan untuk menimpa / memperluas templat admin default, jadi saya menulis jawaban ini sebagai panduan lengkap, berharap itu akan membantu untuk orang lain di masa depan.
Di mysite/admin.py
, buat sub-kelas dari AdminSite
:
from django.contrib.admin import AdminSite
class CustomAdminSite(AdminSite):
# set values for `site_header`, `site_title`, `index_title` etc.
site_header = 'Custom Admin Site'
...
# extend / override admin views, such as `index()`
def index(self, request, extra_context=None):
extra_context = extra_context or {}
# do whatever you want to do and save the values in `extra_context`
extra_context['world'] = 'Earth'
return super(CustomAdminSite, self).index(request, extra_context)
custom_admin_site = CustomAdminSite()
Pastikan untuk mengimpor custom_admin_site
di admin.py
aplikasi Anda dan mendaftarkan model Anda di atasnya untuk menampilkannya di situs admin kustom Anda (jika Anda mau).
Di mysite/apps.py
, buat sub-kelas dari AdminConfig
dan setel default_site
ke admin.CustomAdminSite
dari langkah sebelumnya:
from django.contrib.admin.apps import AdminConfig
class CustomAdminConfig(AdminConfig):
default_site = 'admin.CustomAdminSite'
Dalam mysite/settings.py
, ganti django.admin.site
di INSTALLED_APPS
dengan apps.CustomAdminConfig
(Anda admin kustom aplikasi konfigurasi dari langkah sebelumnya).
Masuk mysite/urls.py
, ganti admin.site.urls
dari URL admin menjadicustom_admin_site.urls
from .admin import custom_admin_site
urlpatterns = [
...
path('admin/', custom_admin_site.urls),
# for Django 1.x versions: url(r'^admin/', include(custom_admin_site.urls)),
...
]
Buat templat yang ingin Anda ubah dalam templates
direktori Anda , pertahankan struktur direktori templat admin Django default seperti yang ditentukan dalam dokumen . Misalnya, jika Anda memodifikasi admin/index.html
, buat file templates/admin/index.html
.
Semua templat yang ada dapat dimodifikasi dengan cara ini, dan nama serta strukturnya dapat ditemukan dalam kode sumber Django .
Sekarang Anda dapat mengganti template dengan menulisnya dari awal atau memperluasnya dan kemudian mengganti / memperluas blok tertentu.
Misalnya, jika Anda ingin menyimpan semuanya sebagaimana adanya tetapi ingin menimpa content
blokir (yang di halaman indeks mencantumkan aplikasi dan modelnya yang Anda daftarkan), tambahkan yang berikut ini ke templates/admin/index.html
:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{% endblock %}
Untuk mempertahankan konten asli blok, tambahkan di {{ block.super }}
mana pun Anda ingin konten asli ditampilkan:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{{ block.super }}
{% endblock %}
Anda juga dapat menambahkan gaya dan skrip kustom dengan memodifikasi blok extrastyle
dan extrahead
.