在jinja2模板中只包含一次文件

时间:2013-10-01 17:52:28

标签: python jinja2

我可以阻止文件在模板中多次包含吗?

这是一些(破碎的)示例代码:

# test.py
import jinja2

ENV = jinja2.Environment(loader=jinja2.FileSystemLoader('.'))

template = ENV.get_template('template.html')
print template.render({})

模板看起来像这样:

{% include 'includejquery.html' %}
{% include 'includejquery.html' %}

正如你所看到的,我已经将jquery包括两次(oops)。我希望我可以做一些与C预处理器相似的东西:

{% if _JQUERY is defined %}
{% else %}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
{% set _JQUERY = 1 %}
{% endif %}

但这似乎不起作用。这里有干净的解决方案吗?

我这样做的原因是因为我有多个组件 - 每个组件都有自己的包含文件以及使用该组件所需的所有内容。目前我正在将JQuery从包含文件中分解出来,但随着依赖关系的增长,包括JQuery多次导致一些脚本中断,这可能会变得乏味。

1 个答案:

答案 0 :(得分:2)

我曾经解决过这样的问题:

base.html文件:

{% set media_files = [] %}

sub_template:

{% extends 'base.html' %}
{{ media_files.append('jquery.js') }}

这些天我建议使用RequireJS,HeadJS或YepNope

之类的东西