我在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}}
有什么办法解决这个问题吗?
答案 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处理其余的模板。
使用两个具有这种交错和重叠职责的模板引擎(更不用说相同的模板变量标记语法),使“引用”完全必要,但也很琐碎。