Django模板,包括将代码注入父块的页面

时间:2015-09-22 15:39:03

标签: django django-templates django-1.8

是否可以在另一个模板中包含一个模板(带有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.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代码放在一个地方(父母<script>标签),而不是散布在整个地方(就像使用所提出的解决方案一样)。

任何人都可以对此提出一些意见或想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用django-sekizai来实现此目的。

使用sekizai,您可以在</body>

之前定义JavaScript块
{% render_block "js" %}

然后,只要您需要向该块添加JavaScript,就可以写下:

{% addtoblock "js" %}
    <script type="text/javascript">
        // your JavaScript
    </script>
{% endaddtoblock %}

如果{%addtoblock%}块中的内容重复,则只会使用一次。