2010-01-09 28 views
1

例如,假設我想修改Django admin中的admin/change_list.html模板的breadcrumbs塊。如果我試圖重寫這個模板是這樣的:如何在Django中修改可重用應用程序的模板?

{% extends "admin/change_list.html" %} 
{% block breadcrumbs %} ... my changes ... {% endblock %} 

然後Django的嘗試加載我重寫的時候,因爲「擴展」標籤嘗試加載覆蓋,而不是原來的模板進入無限循環。

一個明顯的方法是複製&粘貼整個源模板,但這正是我想要避免的。那麼,如何修改模板而無需將其全部複製並粘貼到我的項目中?

+0

這是一個重複http://stackoverflow.com/questions/3967801/django-overriding-and-extending-an-app-template – gotgenes 2012-12-15 09:38:58

+0

@gotgenes我不反對他們被合併,雖然嚴格來說_that_是_this_的副本:) – 2012-12-15 19:24:33

回答

3

覆蓋管理模板的完整詳細信息在這裏:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

如果您只想更改單個應用程序的模板,則可以將其簡單地保存爲app_label/change_list.html。如果您嘗試將其更改爲單個模型,則可以將其保存爲app_label/model_as_underscores/change_list.html

如果您嘗試更改所有內容,則可以使用其他名稱創建一個新模板,並在所有ModelAdmin子類中將其名稱設置爲change_list_template屬性。 (在ModelAdmin,你可以做同樣的事情change_form_templatedelete_confirmation_templateobject_history_template。上AdminSite,我們可以覆蓋在相同的方式index_templatelogin_template屬性。)

這兩種方法都可以讓你從延長原始的管理模板。

+1

感謝您指點我正確的方向。我想覆蓋所有應用程序的塊。在我的'admin.py'結尾添加了'admin.ModelAdmin.change_list_template =「admin/myproject_change_list.html」',並做到了。不完全「乾淨」,但肯定夠好。 – 2010-01-09 16:37:09

相關問題