[更新]
我誤解了問題,我原來的答覆僅適用於管理應用程序,它有一個內置的模板擴展機制。對於缺乏這種機制的其他應用程序,我只需分叉原始模板,而不是像自定義的模板加載器那樣擺弄選定的答案。如果你擔心分叉,你也可以實施一個擴展機制,如果你認爲它是值得的,那麼回饋到原始項目。
[原創答案]
直從細manual: 由於管理模板的模塊化設計,它通常是既無必要,也建議更換整個模板。只覆蓋模板中需要更改的部分幾乎總是更好。
繼續上面的例子中,我們要添加旁邊的歷史工具的頁面模型一個新的鏈接。在查看change_form.html之後,我們確定我們只需要重寫object-tools塊。因此,這裏是我們的新change_form.html:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block object-tools %}
{% if change %}{% if not is_popup %}
<ul class="object-tools">
<li><a href="history/" class="historylink">{% trans "History" %}</a></li>
<li><a href="mylink/" class="historylink">My Link</a></li>
{% if has_absolute_url %}
<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">
{% trans "View on site" %}</a>
</li>
{% endif%}
</ul>
{% endif %}{% endif %}
{% endblock %}
就是這樣!如果我們將這個文件放在templates/admin/my_app目錄中,我們的鏈接將出現在每個模型的更改表單上。
@paulo:據我所知,大約有一般重寫應用程序的模板,當然文檔的,因爲這是日常工作,但我從來沒有見過任何東西關於擴展具有相同名稱的模板。如果您知道這是在文檔中,請將我指向該地點... – 2010-10-19 11:38:29
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template – 2010-10-19 11:53:30
此處的方法僅適用於特定於應用程序的管理模板,因爲這些模板將轉到與原始模板不同的路徑。Iguess這就是爲什麼這是在*管理*文檔,而不是在一般;) – 2011-09-14 16:19:43