目錄
-
后台顯示文字與自定義
-
列表頁自定義字段
-
列表也自定義批量操作
-
后台權限自定義
-
使用內聯字段
-
模型列表頁自定義
-
模型修改頁自定義
-
其他
6.如何覆蓋Django Admin后台模板?
原文鏈接:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates
你可以覆蓋Django Admin后台,不同頁面模板來生成自定義的管理后台。你也可以只對某個特定應用或模型來覆蓋某一部分模板文件。
設置你項目的Admin后台模板目錄
默認Admin后台模板文件位於contrib/admin/templates/admin目錄中。
為了覆蓋其中的一個或多個,首先admin在項目目錄中創建一個templates目錄。該目錄可以是您在設置DIRS的DjangoTemplates后端選項中 指定的任何目錄TEMPLATES。如果您已經自定義了該'loaders'選項,請確保 'django.template.loaders.filesystem.Loader'在之前出現,'django.template.loaders.app_directories.Loader'以便模板加載系統可以在隨附的自定義模板之前 找到您的自定義模板django.contrib.admin。
在此admin目錄中,創建以您的應用程序命名的子目錄。在這些應用程序子目錄中,創建以模型命名的子目錄。請注意,管理應用程序在查找目錄時將小寫模型名稱,因此,如果要在區分大小寫的文件系統上運行應用程序,請確保將目錄命名為小寫。
要覆蓋特定應用程序的管理模板,可以從django/contrib/admin/templates/admin目錄復制並編輯該模板,然后將其保存到剛創建的目錄之一。
例如,如果我們想在名為的應用程序中為所有模型的更改列表視圖添加工具my_app,我們將復制 contrib/admin/templates/admin/change_list.html到 templates/admin/my_app/項目目錄,並進行必要的更改。
如果我們只想為名為“Page”的特定模型向更改列表視圖添加工具,則可以將該文件復制到 templates/admin/my_app/page項目目錄中。
覆蓋與替換Admin模板
由於管理模板的模塊化設計,通常既不需要也不建議更換整個模板。最好只覆蓋需要更改的模板中的部分內容。
要繼續上面的示例,我們想History在Page模型工具旁邊添加一個新鏈接 。查看后,change_form.html 我們確定只需要覆蓋該object-tools-items塊。因此,這是我們的新產品change_form.html代碼為:
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}
<li>
<a href="{% url opts|admin_urlname:'history' original.pk|admin_urlquote %}" class="historylink">{% translate "History" %}</a>
</li>
<li>
<a href="mylink/" class="historylink">My Link</a>
</li>
{% if has_absolute_url %}
<li>
<a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="viewsitelink">{% translate "View on site" %}</a>
</li>
{% endif %}
{% endblock %}
就是這樣!如果我們將此文件放在templates/admin/my_app 目錄中,則鏈接將顯示在my_app中所有模型的更改表單上。
每個應用程序或模型可以覆蓋的模板
並非每個contrib/admin/templates/admin下的模板都可以被應用程序或模型覆蓋。以下模板頁面支持應用或模型級的覆蓋:
- actions.html
- app_index.html
- change_form.html
- change_form_object_tools.html
- change_list.html
- change_list_object_tools.html
- change_list_results.html
- date_hierarchy.html
- delete_confirmation.html
- object_history.html
- pagination.html
- popup_response.html
- prepopulated_fields_js.html
- search_form.html
- submit_line.html
對於那些無法以這種方式覆蓋的模板,你仍然可以通過將修改后的版本放在templates/admin目錄中來覆蓋整個項目的模板 。這對於創建自定義404和500頁面特別有用。
注意:一些Admin模板(如change_list_results.html用於呈現自定義包含標簽)。這些標簽可能會被覆蓋,但是在這種情況下,最好創建自己的相關標簽版本並為其指定一個不同的名稱。這樣,你可以有選擇地使用它。