Ber*_*ant 43 django django-templates
如果要覆盖django中的应用程序附带的模板(在app/templates/app /中),则在另一个目录中创建一个同名模板,模板加载器在应用程序的模板目录之前检查该模板.如果您只想覆盖模板的某些块,您还必须复制整个模板广告更改该块,这实际上不是很干.
有没有人知道覆盖orginial模板的方法,同时在扩展它时,你只需要覆盖你想要改变的特定块?(事情是这样做而不更改模板的名称,因为在某些情况下,您可能必须更改视图以使其与另一个模板一起使用)
编辑:正如亚当泰勒在Django 1.9的评论中所指出的,这可能没有任何黑客攻击.
lee*_*ech 35
我认为这个相关问题的答案是恰当的; 目前,最好的解决方案似乎是使用PyPI上的django-apptemplates包中的自定义模板加载器,因此您只需使用pip来安装它(例如pip install django-apptemplates
).
模板加载器允许您在特定应用程序中扩展模板; 例如,要扩展管理界面的索引页面,您需要添加
'apptemplates.Loader',
Run Code Online (Sandbox Code Playgroud)
到你的TEMPLATE_LOADERS
列表settings.py
,并使用
{% extends "admin:admin/index.html" %}
Run Code Online (Sandbox Code Playgroud)
在你的模板中.
作为更新,因为这似乎是一个受欢迎的问题.我没有任何问题地使用了过度使用的应用程序.它提供了一个新的关键字过度扩展,允许扩展具有相同名称的模板.
并且使用pip很容易安装:
pip install -U django-overextends
Run Code Online (Sandbox Code Playgroud)
Django 1.9和更高版本具有此功能:
Django模板加载器现在可以递归扩展模板。
因此,您可以从中获取app1
具有如下内容的文件:
app1/templates/example/foobar.html
:
<p>I'm from app1</p>
{% block main %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下文件扩展它app2
(注意模板名称example/foobar.html
是相同的):
app2/templates/example/foobar.html
:
{% extends "example/foobar.html" %}
{% block main %}
<p>I'm from app2</p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
最终结果应为:
<p>I'm from app1</p>
<p>I'm from app2</p>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20749 次 |
最近记录: |