使用Django的admin管理工具,可以快速的構(gòu)建自己的管理平臺(tái)仑扑,使用Django原生太的模板更能使我們節(jié)省很多工作量览爵。但有時(shí)候,模板上展現(xiàn)的內(nèi)容并不能滿足我們的業(yè)務(wù)需求镇饮,我們需要些許調(diào)整就可以達(dá)到我們想要的效果蜓竹,此時(shí)我們可以通過重寫admin模板來實(shí)現(xiàn)。
我們繼續(xù)使用前面兩篇文檔中所使用的項(xiàng)目,并在此基礎(chǔ)上來作調(diào)整俱济。我們假設(shè)我們只允許添加Vm司蔬、查看Vm,不允許編輯Vm信息姨蝴。因?yàn)樘砑涌√洹⒉榭础⒕庉嬍褂玫氖峭粋€(gè)模板文件左医,就必須重寫模板文件授帕。
重寫模板
關(guān)鍵步驟
首先在我們的項(xiàng)目根目錄下建立一個(gè)子templates目錄 。
其次在templates目錄下建立一個(gè)admin子目錄浮梢。
然后在admin目錄下以我人的應(yīng)用名建立一個(gè)子目錄(需要小寫)跛十,如我們的應(yīng)用cloud 。
在應(yīng)用目錄下以模型層的名字建立一個(gè)子目錄(需要小寫)秕硝,如在cloud目錄下創(chuàng)建vm目錄芥映。
我們從django/contrib/admin/templates/admin目錄下拷貝change_form.html文件到我們新建立的vm目錄下。
-
項(xiàng)目目錄結(jié)構(gòu)
-
修改setting.py文件中的配置項(xiàng)TEMPLATES, 將DIRS的值設(shè)置為[os.path.join(BASE_DIR, 'templates')]远豺。TEMPLATES的整體信息如下:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
修改chang_form.html文件
修改chang_form.html文件
-
去除{% block object-tools %}……{% endblock %}代碼塊,如圖示:
-
去除{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}代碼奈偏,如圖所示:
在{% block after_related_objects %}{% endblock %}代碼后面新增代碼{% if add %}{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}{% endif %},如圖示:
-
啟動(dòng)項(xiàng)目躯护,查看運(yùn)行結(jié)果惊来,新增信息時(shí),有提交按鈕棺滞,編輯頁(yè)沒有提交按鈕裁蚁。如圖所示:
修改站點(diǎn)名稱與Title
從 django/contrib/admin/templates/admin 目錄下拷貝base_site.html文件至項(xiàng)目/templates/admin目錄下。修改base_site.html继准,使之內(nèi)容如下:
{% extends "admin/base.html" %}
{% block title %}云主機(jī)管理{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">云主機(jī)管理</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
查看修改后效果:補(bǔ)充
如果想整個(gè)站點(diǎn)以中文的形式展現(xiàn)枉证,我們需要做一些全局配置。在settings.py文件中移必,找到LANGUAGE_CODE與TIME_ZONE室谚,分別設(shè)置為‘zh-hans’與‘Asia/Shanghai’,修改之后避凝,代碼如下:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
啟動(dòng)服務(wù)舞萄,查看效果眨补,我們會(huì)發(fā)現(xiàn)界面以中文展現(xiàn):
知識(shí)鏈接
Admin模板文件位于contrib/admin/templates/admin 目錄中管削。
如要覆蓋一個(gè)或多個(gè)模板,首先在你的項(xiàng)目的templates 目錄中創(chuàng)建一個(gè)admin 目錄撑螺。它可以是你在TEMPLATES 設(shè)置的DjangoTemplates 后端的DIRS 選項(xiàng)中指定的任何目錄含思。如果你已經(jīng)自定義'loaders' 選項(xiàng),請(qǐng)確保'django.template.loaders.filesystem.Loader' 出現(xiàn)在 'django.template.loaders.app_directories 之前。Loader'含潘,以便在包含django.contrib.admin的模板之前饲做,模板加載系統(tǒng)可以找到您的自定義模板。
為一個(gè)特定的app重寫admin模板, 需要拷貝django/contrib/admin/templates/admin 目錄到你創(chuàng)建的app目錄下, 并且修改它們.
如果我們只想為名為“Page”的特定模型添加一個(gè)工具到更改列表視圖遏弱,我們將把同一個(gè)文件復(fù)制到我們項(xiàng)目的templates/admin/my_app/page目錄盆均。
每個(gè)應(yīng)用或模型中可以被重寫的模板
不是contrib/admin/templates/admin 中的每個(gè)模板都可以在每個(gè)應(yīng)用或每個(gè)模型中覆蓋。以下可以 ︰
app_index.html
change_form.html
change_list.html
delete_confirmation.html
object_history.html
對(duì)于那些不能以這種方式重寫的模板漱逸,你可能仍然為您的整個(gè)項(xiàng)目重寫它們泪姨。只需要將新版本放在你的templates/admin 目錄下。這對(duì)于要?jiǎng)?chuàng)建自定義的404 和500 頁(yè)面特別有用饰抒。