[django]解决 django 模板中无法正常输入 {{ 或 {%

默认情况下,模板中的 {{{% 会被当作是 django 模板引擎标签和过滤器的关键字。 如果我们所用的 javascript 模板引擎的关键字也是 {{{% 的话,会出现无法正常输入 {{{% 的情况。

比如,下面的模板代码:

<script id="template" type="x-tmpl-mustache">
    {{#stooges}}
      <li>{{name}}</li>
    {{/stooges}}
    {% test %}
</script>

会报如下错误:

TemplateSyntaxError at /foo/bar/
Could not parse the remainder: '#stooges' from '#stooges'

有下面四种解决办法:

  • 临时关掉模板引擎 [ref] :
{% verbatim %}
<script id="template" type="x-tmpl-mustache">
  {{#stooges}}
  <li>{{name}}</li>
  {{/stooges}}
  {% test %}
</script>
{% endverbatim %}
  • 修改 javascript 模板引擎的关键字
  • 使用 templatetag 标签 [ref] :
<script id="template" type="x-tmpl-mustache">
  {% templatetag openvariable %}#stooges{% templatetag closevariable %}
  <li>{% templatetag openvariable %}name{% templatetag closevariable %}</li>
  {% templatetag openvariable %}/stooges{% templatetag closevariable %}
  {% templatetag openblock %} test {% templatetag closeblock %}
</script>
  • 自定义几个标签,用于输入包含关键字的字符串:
@register.simple_tag()
def brace(str):
    return "{%s}" % str


@register.simple_tag()
def double_brace(str):
    return "{{%s}}" % str
<script id="template" type="x-tmpl-mustache">
  {% double_brace "#stooges" %}
  <li>{% double_brace "name" %}</li>
  {% double_brace "/stooges" %}
  {% brace "% test %" %}
</script>

Comments