Джанго и Усы используют один и тот же синтаксис для шаблона - PullRequest
24 голосов
/ 02 ноября 2011

Я пытаюсь переправить HTML-шаблон в HTML для mustache.js, однако шаблонизатор 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>

и я могу получить шаблон HTML, запустив $ (el) .html (), и сгенерировать HTML, используя Mustache.to_html (temp, data);

Я мог бы поместить весь шаблон в другой статический файл и подать его из CDN, но тогда было бы трудно отследить, где находится шаблон, и хотя бы один дополнительный http-запрос.

Ответы [ 7 ]

48 голосов
/ 11 июня 2012

Вы можете просто изменить теги:

Mustache.tags = ['[[', ']]'];
24 голосов
/ 02 ноября 2011

Вы можете использовать шаблонную метку {% templatetag %} для распечатки символов, которые обычно обрабатываются Django. Например:

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

Результаты в вашем HTML:

{{ variable }}

Полный список аргументов см .: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

22 голосов
/ 04 февраля 2013

Если вы используете django 1.5 и новее, используйте:

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

Если вы застряли с django 1.2 в appengine, расширьте синтаксис 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

6 голосов
/ 15 января 2012

Попробуйте использовать django-mustachejs

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

Django-mustachejs сгенерирует следующее:

<script>Mustache.TEMPLATES=Mustache.TEMPLATES||{};Mustache.TEMPLATES['main']='<<Your template >>';</script>
2 голосов
/ 09 февраля 2012

У меня та же проблема, но использование

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

слишком многословно для меня.Я только что добавил очень простой пользовательский тег шаблона:

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

Так что теперь я могу написать:

{% mtag "variable" %}
1 голос
/ 07 декабря 2013

Вы можете использовать встроенный тег разделителя mustache.js для изменения тегов по умолчанию, используемых усами.

т.е.

{{=<% %>=}}

Теперь вы можете сделать это:

<% variable %>
1 голос
/ 18 апреля 2012

У меня та же проблема, поэтому большую часть времени мои переменные являются частью переводимой строки.

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

Вы можете использовать тег шаблона trans, даже если вы не предлагаете i18n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...