2010-01-09 48 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

相关问题