结合使用Python Flask Jinja2和Moustache

时间:2019-06-20 14:21:09

标签: python flask jinja2 mustache

我在Flask和jinja2中使用Mustache.js,但是在渲染图像时遇到问题。

由于{% raw %}{% endraw %},我成功地在Jinja中渲染了我的胡子模板,但现在我需要在模板中使用Jinja中的url_for()来定义图像源。来自胡须的{{}}与来自Jinja的target = document.getElementById("target"); var template = $('#my-template').html(); Mustache.parse(template); var rendered = Mustache.render(template, {"title":"My Title","photo_name":"photo.jpg"}); target.innerHTML = rendered; 之间存在冲突。

我的javascript:

<script id="my-template" type="x-tmpl-mustache">
{% raw %}
  <h1> {{title}} </h1>
  <img src="{{ url_for('static',filename='images/{{photo_name}}') }}" alt="my_photo">
{% endraw %}
</script>

还有我的模板:

{{1}}

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您在很多内容上都表达了raw处理,其中的某些内容您并不是很想成为原始对象。建议您缩小{% raw %} ... {% endraw %}的范围,使其仅涵盖您希望Moustache填写的那些模板变量。例如:

<script id="my-template" type="x-tmpl-mustache">

  <h1> {% raw %}{{title}}{% endraw %} </h1>
  <img src="{{ url_for('static',filename='images/')}}{% raw %}{{photo_name}}{% endraw %}" alt="my_photo">

</script>

对于浏览器,这将呈现以下内容,然后可以用JS / Mustache填充其模板部分:

<script id="my-template" type="x-tmpl-mustache">

  <h1> {{title}} </h1>
  <img src="/static/images/{{photo_name}}" alt="my_photo">

</script>

通过这种方式,您可以让Mustache处理特定的模板替换,让Flask / Jinja2处理其余的模板。

使用两个具有这种交错和重叠职责的模板引擎(更不用说相同的模板变量标记语法),使“引用”完全必要,但也很琐碎。