Django-管理站點重寫admin模板

使用Django的admin管理工具,可以快速的構(gòu)建自己的管理平臺,使用Django原生太的模板更能使我們節(jié)省很多工作量。但有時候,模板上展現(xiàn)的內(nèi)容并不能滿足我們的業(yè)務(wù)需求,我們需要些許調(diào)整就可以達到我們想要的效果,此時我們可以通過重寫admin模板來實現(xiàn)。

我們繼續(xù)使用前面兩篇文檔中所使用的項目,并在此基礎(chǔ)上來作調(diào)整。我們假設(shè)我們只允許添加Vm、查看Vm,不允許編輯Vm信息。因為添加、查看、編輯使用的是同一個模板文件,就必須重寫模板文件。

重寫模板

關(guān)鍵步驟
  1. 首先在我們的項目根目錄下建立一個子templates目錄 。

  2. 其次在templates目錄下建立一個admin子目錄。

  3. 然后在admin目錄下以我人的應(yīng)用名建立一個子目錄(需要小寫),如我們的應(yīng)用cloud 。

  4. 在應(yīng)用目錄下以模型層的名字建立一個子目錄(需要小寫),如在cloud目錄下創(chuàng)建vm目錄。

  5. 我們從django/contrib/admin/templates/admin目錄下拷貝change_form.html文件到我們新建立的vm目錄下。

  6. 項目目錄結(jié)構(gòu)


    重寫模板.png
  7. 修改setting.py文件中的配置項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',
                ],
            },
        },
    ]
    
  8. 修改chang_form.html文件

修改chang_form.html文件
  1. 去除{% block object-tools %}……{% endblock %}代碼塊,如圖示:

    重寫模板_去除代碼.png
  2. 去除{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}代碼,如圖所示:

    重寫模板_去除代碼_操作按鈕.png
  3. 在{% block after_related_objects %}{% endblock %}代碼后面新增代碼{% if add %}{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}{% endif %},如圖示:

重寫模板_增加此行代碼.png
  1. 啟動項目,查看運行結(jié)果,新增信息時,有提交按鈕,編輯頁沒有提交按鈕。如圖所示:
    新增.png
    修改.png
修改站點名稱與Title

從 django/contrib/admin/templates/admin 目錄下拷貝base_site.html文件至項目/templates/admin目錄下。修改base_site.html,使之內(nèi)容如下:

{% extends "admin/base.html" %}

{% block title %}云主機管理{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">云主機管理</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

查看修改后效果:
修改站點名稱與Title.png

補充

如果想整個站點以中文的形式展現(xiàn),我們需要做一些全局配置。在settings.py文件中,找到LANGUAGE_CODE與TIME_ZONE,分別設(shè)置為‘zh-hans’與‘Asia/Shanghai’,修改之后,代碼如下:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

啟動服務(wù),查看效果,我們會發(fā)現(xiàn)界面以中文展現(xiàn):


中文顯示.png

知識鏈接

Admin模板文件位于contrib/admin/templates/admin 目錄中。

如要覆蓋一個或多個模板,首先在你的項目的templates 目錄中創(chuàng)建一個admin 目錄。它可以是你在TEMPLATES 設(shè)置的DjangoTemplates 后端的DIRS 選項中指定的任何目錄。如果你已經(jīng)自定義'loaders' 選項,請確保'django.template.loaders.filesystem.Loader' 出現(xiàn)在 'django.template.loaders.app_directories 之前。Loader',以便在包含django.contrib.admin的模板之前,模板加載系統(tǒng)可以找到您的自定義模板。

為一個特定的app重寫admin模板, 需要拷貝django/contrib/admin/templates/admin 目錄到你創(chuàng)建的app目錄下, 并且修改它們.

如果我們只想為名為“Page”的特定模型添加一個工具到更改列表視圖,我們將把同一個文件復(fù)制到我們項目的templates/admin/my_app/page目錄。

每個應(yīng)用或模型中可以被重寫的模板

不是contrib/admin/templates/admin 中的每個模板都可以在每個應(yīng)用或每個模型中覆蓋。以下可以 ︰

app_index.html
change_form.html
change_list.html
delete_confirmation.html
object_history.html

對于那些不能以這種方式重寫的模板,你可能仍然為您的整個項目重寫它們。只需要將新版本放在你的templates/admin 目錄下。這對于要創(chuàng)建自定義的404 和500 頁面特別有用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容