是否可以在另一个模板中包含一个模板(带有include
django模板标签),并将一些内容“注入”包含(父)到block
标签的页面,或者类似的东西?
假设我的项目中有以下文件结构:
App/
(...)
templates/
base.html
index.html
_include1.html
_include2.html
_include3.html
_include4.html
base.html
的代码:
<!DOCTYPE html>
<html>
<head lang="en">
(...)
</head>
<body>
<script type="application/javascript">
$(function () {
{% block extra_script %}
{% endblock %}
});
</script>
index.html
的代码:
{% extends "base.html" %}
{% load static %}
(...)
<div class="row gutter">
<div>
{% include "_include1.html" with object=object%}
</div>
<div>
{% include "_include2.html" with object=object %}
</div>
<div>
{% include "_include3.html" with object=object %}
</div>
<div>
{% include "_include4.html" with object=object %}
</div>
</div>
在每个_include*.html
我想调用一些特定的JS函数(例如),但我想把它放在父母(index.html
或base.html
中,不是在我的情况下)extra_script
阻止。我搜索了文档,其他问题,但没有找到使用include
语法执行此操作的方法。
我通过extends
标签做了类似的事情。但是,我不想在index.html
或base.html
中为我需要包含的每个页面定义一个块({% bloc include_* %}
。
所以我现在(并且工作)的解决方案是在每个包含的页面中定义一个脚本,如下所示(_include1.html
):
<div>
(...)
</div>
<script>
$(function () {
//Code that should be placed within parents script page (this is just an example)
var a = function (){
(...)
};
a();
});
</script>
但是我认为通过使用django模板引擎可以更好地实现这一点,而无需为每个需要包含的页面定义块。此外,我希望将所有js代码放在一个地方(父母<script>
标签),而不是散布在整个地方(就像使用所提出的解决方案一样)。
任何人都可以对此提出一些意见或想法吗?
谢谢!
答案 0 :(得分:2)
尝试使用django-sekizai来实现此目的。
使用sekizai,您可以在</body>
:
{% render_block "js" %}
然后,只要您需要向该块添加JavaScript,就可以写下:
{% addtoblock "js" %}
<script type="text/javascript">
// your JavaScript
</script>
{% endaddtoblock %}
如果{%addtoblock%}块中的内容重复,则只会使用一次。