Django 模板,包括将代码注入父块的页面
Django templates, including page(s) that injects code into parent block
是否可以在另一个模板中包含一个模板(带有 include
django 模板标签)并且 "inject" 一些内容到包含(父级)通过 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 代码放在一个地方(parents <script>
标记),而不是分散在各处(就像所提供的解决方案一样)。
任何人都可以为此提供一些意见或想法吗?
谢谢!
为此目的尝试使用 django-sekizai。
使用 sekizai,您可以在 </body>
:
之前定义一个 JavaScript 块
{% render_block "js" %}
然后每当你需要将 JavaScript 添加到该块时,你可以这样写:
{% addtoblock "js" %}
<script type="text/javascript">
// your JavaScript
</script>
{% endaddtoblock %}
如果{% addtoblock %}块中的内容有重复,它们将只被使用一次。
是否可以在另一个模板中包含一个模板(带有 include
django 模板标签)并且 "inject" 一些内容到包含(父级)通过 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 代码放在一个地方(parents <script>
标记),而不是分散在各处(就像所提供的解决方案一样)。
任何人都可以为此提供一些意见或想法吗?
谢谢!
为此目的尝试使用 django-sekizai。
使用 sekizai,您可以在 </body>
:
{% render_block "js" %}
然后每当你需要将 JavaScript 添加到该块时,你可以这样写:
{% addtoblock "js" %}
<script type="text/javascript">
// your JavaScript
</script>
{% endaddtoblock %}
如果{% addtoblock %}块中的内容有重复,它们将只被使用一次。