Django和Mustache对模板使用相同的语法

时间:2011-11-02 18:37:20

标签: javascript django django-templates javascript-framework mustache

然而,我尝试在HTML中为mustache.js走私HTML模板 django模板引擎删除应该是的所有占位符 按原样输出到前端

模板以这种方式包含在HTML中:

<script type="text/x-mustache-template" data-id="header_user_info">
    <div id="header_user_info">
        <div id="notification">0</div>
        <a href="#">{{username}}</a>
    </div>
</script>

我可以通过运行$(el).html()和generate来获取HTML模板 html使用Mustache.to_html(temp,data);

我可以把所有模板放到另一个静态文件中并从中提供服务 CDN,但是很难跟踪模板所属的位置, 以及至少一个额外的http请求。

7 个答案:

答案 0 :(得分:48)

您只需更改标记:

Mustache.tags = ['[[', ']]'];

答案 1 :(得分:24)

您可以使用{% templatetag %}模板标签打印出通常由Django处理的字符。例如:

{% templatetag openvariable %} variable {% templatetag closevariable %}

HTML中的结果如下:

{{ variable }}

有关参数的完整列表,请参阅:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

答案 2 :(得分:22)

如果你使用django 1.5和更新的使用:

  {% verbatim %}
    {{if dying}}Still alive.{{/if}}
  {% endverbatim %}

如果你坚持使用django 1.2 on appengine,请使用verbatim模板命令扩展django语法,如下所示...

from django import template

register = template.Library()

class VerbatimNode(template.Node):

    def __init__(self, text):
        self.text = text

    def render(self, context):
        return self.text

@register.tag
def verbatim(parser, token):
    text = []
    while 1:
        token = parser.tokens.pop(0)
        if token.contents == 'endverbatim':
            break
        if token.token_type == template.TOKEN_VAR:
            text.append('{{')
        elif token.token_type == template.TOKEN_BLOCK:
            text.append('{%')
        text.append(token.contents)
        if token.token_type == template.TOKEN_VAR:
            text.append('}}')
        elif token.token_type == template.TOKEN_BLOCK:
            text.append('%}')
    return VerbatimNode(''.join(text))

在你的文件(python 2.7,HDR)中使用:

from django.template import Context, Template
import django
django.template.add_to_builtins('utilities.verbatim_template_tag')

html = Template(blob).render(Context(kwdict))

在你的文件(python 2.5)中使用:

from google.appengine.ext.webapp import template
template.register_template_library('utilities.verbatim_template_tag')

来源: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html

答案 3 :(得分:6)

尝试使用django-mustachejs

{% load mustachejs %}
{% mustachejs "main" %}

Django-mustachejs将生成以下内容:

<script>Mustache.TEMPLATES=Mustache.TEMPLATES||{};Mustache.TEMPLATES['main']='<<Your template >>';</script>

答案 4 :(得分:2)

我有同样的问题,但使用

{% templatetag openvariable %} variable {% templatetag closevariable %}

对我来说太冗长了。我刚刚添加了一个非常简单的自定义模板标记:

@register.simple_tag
def mtag(tagContent):
    return "{{%s}}" % tagContent

所以我现在可以写:

{% mtag "variable" %}

答案 5 :(得分:1)

我有同样的问题,所以大部分时间我的变量都是可翻译字符串的一部分。

{% trans "The ball is {{ color }}" %}

即使您不提供i18n,也可以使用trans模板标签。

答案 6 :(得分:1)

您可以使用内置的mustache.js set delimiter标记来更改小胡子使用的默认标记。

{{=<% %>=}}

现在你可以这样做:

<% variable %>