如果您想覆盖 django 中应用程序附带的模板(在 app/templates/app/中),您可以在另一个目录中创建一个同名模板,模板加载器会在应用程序的模板目录之前检查该模板。如果您只想覆盖模板的某些 block ,您还必须复制整个模板并更改该 block ,这实际上不是很 DRY。
有没有人知道一种方法来覆盖原始模板,同时扩展它,以便您只需要覆盖您想要更改的特定 block ? (事情是在不更改模板名称的情况下执行此操作,因为在某些情况下,您可能必须更改 View 以使其与另一个模板一起使用)
编辑:正如 Adam Taylor 在 Django 1.9 on 的评论中指出的那样这是可能的,没有任何黑客攻击。
最佳答案
我想答案来自this related question是相关的;目前,最好的解决方案似乎是使用来自 django-apptemplates package on PyPI 的自定义模板加载器。 , 所以你可以只使用 pip安装它(例如 pip install django-apptemplates
)。
模板加载器允许您在特定应用程序中扩展模板;例如,要扩展管理界面的索引页,您可以添加
'apptemplates.Loader',
到 settings.py
中的 TEMPLATE_LOADERS
列表,并使用
{% extends "admin:admin/index.html" %}
在您的模板中。
关于Django:覆盖和扩展应用程序模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3967801/