Tôi không thể tìm thấy một câu trả lời hoặc một phần trong tài liệu Django chính thức có tất cả thông tin tôi cần để ghi đè / mở rộng các mẫu quản trị viên mặc định, vì vậy tôi viết câu trả lời này như một hướng dẫn đầy đủ, hy vọng rằng nó sẽ hữu ích cho những người khác trong tương lai.
Trong mysite/admin.py
, tạo một lớp con của 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()
Đảm bảo nhập custom_admin_site
vào các admin.py
ứng dụng của bạn và đăng ký các mô hình của bạn trên đó để hiển thị chúng trên trang web quản trị tùy chỉnh của bạn (nếu bạn muốn).
Trong mysite/apps.py
, tạo một lớp con của AdminConfig
và đặt default_site
thành admin.CustomAdminSite
từ bước trước:
from django.contrib.admin.apps import AdminConfig
class CustomAdminConfig(AdminConfig):
default_site = 'admin.CustomAdminSite'
Trong mysite/settings.py
, thay thế django.admin.site
trong INSTALLED_APPS
với apps.CustomAdminConfig
(tùy chỉnh quản trị ứng dụng cấu hình của bạn từ bước trước).
Trong mysite/urls.py
, thay thế admin.site.urls
từ URL quản trị thànhcustom_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)),
...
]
Tạo mẫu bạn muốn sửa đổi trong templates
thư mục của mình , duy trì cấu trúc thư mục mẫu quản trị Django mặc định như được chỉ định trong tài liệu . Ví dụ: nếu bạn đang sửa đổi admin/index.html
, hãy tạo tệp templates/admin/index.html
.
Tất cả các mẫu hiện có có thể được sửa đổi theo cách này, tên và cấu trúc của chúng có thể được tìm thấy trong mã nguồn của Django .
Bây giờ bạn có thể ghi đè mẫu bằng cách viết nó từ đầu hoặc mở rộng nó và sau đó ghi đè / mở rộng các khối cụ thể.
Ví dụ: nếu bạn muốn giữ nguyên mọi thứ nhưng muốn ghi đè lên content
khối (trên trang chỉ mục liệt kê các ứng dụng và kiểu máy mà bạn đã đăng ký), hãy thêm phần sau vào templates/admin/index.html
:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{% endblock %}
Để bảo toàn nội dung ban đầu của một khối, hãy thêm {{ block.super }}
bất cứ nơi nào bạn muốn nội dung gốc được hiển thị:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{{ block.super }}
{% endblock %}
Bạn cũng có thể thêm các kiểu và tập lệnh tùy chỉnh bằng cách sửa đổi các khối extrastyle
và extrahead
.