我正在尝试将Jinja2宏输出到调用模板的不同部分。我想要这样做的原因是因为内联Javascript是宏的一部分,但我想在模板的末尾使用所有Javascript。我基本上想做这样的事情
{% import 'tooltip.html' as tooltip %}
<html>
<body>
{% block contents %}
{% tooltip('mytool') %}
{% endblock %}
<script>
{% block javascript %}
{% endblock %}
</script>
</body>
</html>
在宏文件中
{% macro tooltip(name) %}
<div id='{{ name }}'>
This is my tooltip
</div>
{% block javascript %}
jQuery("#{{ name }}").click(function(){//do something});
{% endblock %}
{% endmacro %}
所以最终的结果就像是
<html>
<body>
<div id='mytool'>
This is my tooltip
</div>
<script>
jQuery("#mytool").click(function(){//do something});
</script>
</body>
</html>
我想在我的模板的最后我所有的JavaScript,但宏似乎只是返回然后那里。
是否有我遗漏的东西,或者这是否超出标准的Jinja2并且需要编写扩展名?
由于
答案 0 :(得分:4)
我不确定你是否有可能在Jinja做你所要求的。但我确实认为不同的方法可行,并提供更简单的解决方案:
而不是生成像
这样的标记<div id='mytool'>
This is my tooltip
</div>
和相应的jQuery调用,每个工具提示的ID都是硬编码的,如
<script>
jQuery("#mytool").click(function(){});
</script>
对于页面上的每个工具提示,为每个工具提示提供class
属性,并使jQuery功能适用于具有该class
的所有元素。这样,无论在特定页面上显示什么工具提示,每个页面都可以具有相同的jQuery通用位。
更像是:
<div id="mytool" class="tooltip">
This is my tooltip
</div>
加上更通用的jQuery调用:
<script>
// This will add the onclick handler to any element
// with a class of "tooltip"
jQuery(".tooltip").click(function(){});
</script>
这个jQuery代码可以包含在“基础”模板的底部,这样它就可以在每个页面上使用,而且你不必弄清楚如何从Jinja宏写入两个独立的块。 / p>
答案 1 :(得分:1)
你能把它分成2个功能吗?比如,一个输出标记和一个输出javascript?这是我看到的最简单的方法。这一切都取决于你的用例,但我认为这也是“正确的方式”。