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.htmlbase.html 中,不对我来说很重要)extra_script 块。我在文档和其他问题中进行了搜索,但没有找到使用 include 语法执行此操作的方法。

我做过类似的事情,但通过 extends 标签。但是我不想在 index.htmlbase.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 %}块中的内容有重复,它们将只被使用一次。