Django模板中的Handlebars.js

tsi*_*kos 30 django django-templates handlebars.js

我需要一个javascript模板系统,我认为handlebars.js在这种情况下表现非常出色.我与django模板中的把手模板有语法冲突,因为django尝试渲染把手变量.

django模板中是否有标记用于停止使用花括号渲染块?

就像是:

{{ django_context_varable }} #works
{{% raw %}}
<script id="restaurants-tpl" type="text/x-handlebars-template">
    <ul>
    {{#restaurants}} #not rendered by django, plain text
    <li>{{name}}</li>
    {{/restaurants}}
    </ul>
</script>
{{% endraw %}}
Run Code Online (Sandbox Code Playgroud)

编辑

可能我发现了这个.它工作正常.

更新

Django 1.5原生支持逐字标记.

ryc*_*ych 31

我为另一个js模板系统使用自定义模板标签,在这里:https: //gist.github.com/629508

在模板中使用:

{% load mytags %}
{% verbatim %}
  {{ This won't be touched by {% django's %} template system }}
{% endverbatim %}
Run Code Online (Sandbox Code Playgroud)

编辑:不再需要此自定义模板标记,因为Django的模板语言现在支持{%verbatim%}模板标记.


dr *_*bob 20

django模板中是否有标记用于停止使用花括号渲染块?

Django 1.0-1.4的旧答案: 不,尽管你可以将块放在一个单独的文件中并包含它而不渲染或使用不同的模板引擎.

新答案:上述答案在2011年8月提出问题并得到回答时是正确的.在Django 1.5开始(公布的2013年2月,尽管在2012年年底的α/β版本),他们推出了{% verbatim %}{% endverbatim %}这将阻止Django的模板引擎从处理该块中的内容.

因此,对于问题,以下将在django 1.5+开箱即用:

{{ django_context_varable }} #works
{% verbatim %}
<script id="restaurants-tpl" type="text/x-handlebars-template">
    <ul>
    {{#restaurants}} #not rendered by django, plain text
    <li>{{name}}</li>
    {{/restaurants}}
    </ul>
</script>
{% endverbatim %}
Run Code Online (Sandbox Code Playgroud)

关于逐字记录的文件在这里.是的,之前其他人已经注意到这一点,但由于这是公认的答案,我应该列出最简单的解决方案.

  • `{%ssi%}`做同样的事情(如{%include_raw%}),它已经在标准中了 (4认同)