python django文檔 - 如何覆蓋和擴展基本的Django管理模板?




5 Answers

更新

閱讀您的Django版本的文檔。 例如

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#admin-overriding-templates

2011年的原始答案:

大約一年半前,我遇到了同樣的問題,我在djangosnippets.org上找到了一個很好的模板加載器,這使得這很容易。 它允許您在特定的應用程序中擴展模板,使您可以創建自己的admin / index.html ,從admin應用程序擴展admin / index.html模板。 喜歡這個:

{% extends "admin:admin/index.html" %}

{% block sidebar %}
    {{block.super}}
    <div>
        <h1>Extra links</h1>
        <a href="/admin/extra/">My extra link</a>
    </div>
{% endblock %}

我已經給出了一個關於如何在我的網站上的博客文章中使用這個模板加載器的完整示例。

django設定 createsuperuser

如何覆蓋管理模板(例如admin / index.html),同時對其進行擴展(請參閱https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template )?

首先 - 我知道這個問題之前已經被詢問和回答過了(請參閱Django:覆蓋和擴展應用程序模板 ),但正如答案所述,如果您使用的是app_directories模板加載器(這是大多數時間)。

我目前的解決方法是複制並擴展它們,而不是直接從管理模板中進行擴展。 這很好用,但是當管理員模板發生變化時,它會讓人感到困惑,並增加額外的工作量。

它可以為模板考慮一些自定義的擴展標籤,但如果已經存在解決方案,我不想重新發明輪子。

在旁注:有人知道Django本身是否會解決這個問題嗎?




如果您需要覆蓋admin/index.html ,則可以設置index_template參數。

例如

# urls.py
...
from django.contrib import admin

admin.site.index_template = 'admin/my_custom_index.html'
admin.autodiscover()

並將您的模板放置在<appname>/templates/admin/my_custom_index.html




最好的方法是將Django管理模板放入您的項目中。 所以你的模板將在templates/admin而股票Django的管理模板將在說template/django_admin 。 然後,你可以做如下的事情:

模板/管理/ change_form.html

{% extends 'django_admin/change_form.html' %}

Your stuff here

如果您擔心讓庫存模板保持最新狀態,可以使用svn externals或類似軟件包括它們。




我同意克里斯普拉特。 但我認為最好創建符合管理模板的原始Django文件夾的符號鏈接:

ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/ templates/django_admin

你可以看到它取決於python版本和Django安裝的文件夾。 所以在未來或生產服務器上,您可能需要更改路徑。




你可以使用django-overextends ,它為Django提供循環模板繼承。

它來自Mezzanine CMS,從Stephen提取它到獨立的Django擴展。

您可以在Mezzanine文檔中的“覆蓋vs擴展模板”(http:/mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-extending-templates)中找到更多信息。

有關更深層次的內容,請參閱Stephens博客“Django的循環模板繼承”(http:/blog.jupo.org/2012/05/17/circular-template-inheritance-for-django)。

並在Google Groups中討論(https:/groups.google.com/forum/#!topic / mezzanine-users / sUydcf_IZKQ),開始開發此功能。

注意:

我沒有聲望添加超過2個鏈接。 但我認為這些鏈接提供了有趣的背景信息。 所以我剛剛在“http(s):”之後留下了斜線。 也許某個聲譽較好的人可以修復鏈接並刪除該註釋。




Related

python django django-admin