使用 Jsrender 时如何让 Django *不* 解析“{{variable}}”?

How to have Django *not* parse "{{variable}}" when using Jsrender?

我正在构建一个 Django 模板,它将使用 jsrender 以便为 html 代码构建动态 Javascript 模板。

但是,我发现当我在我的代码中放置一个 Jsrender 模板时,Django 会崩溃,因为 Django 将 {{}} 之间的任何内容解析为变量,而 Jsrender 将其用于自己的变量。例如,Jsrender 中的模板可能如下所示:

    <script id="headerTemplate" type="text/x-jsrender">
        <h1>{{:label}}</h1>
    </script>

Django 看到 {{:label}} 并尝试解析它,这导致错误。

有没有我可以调用的 Django 块,它会使 Django 解析其中的任何文本?或者以其他方式转义 { 字符?

您可以开启 {% verbatim %} … {% endverbatim %} template tag [Django-doc]:

{% <strong>verbatim</strong> %}
    <script id="headerTemplate" type="text/x-jsrender">
        <h1>{{:label}}</h1>
    </script>
{% <strong>endverbatim</strong> %}

这将因此呈现双花括号,而不是解释它们。

您可以在JsRender中选择替代分隔符,以避免与Django分隔符冲突。

https://www.jsviews.com/#settings/delimiters

例如:

$.views.settings.delimiters("<%", "%>");

将标记语法更改为 <%...%>