Django и Mustache используют один и тот же синтаксис для шаблона
Я пытаюсь провести контрабанду 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-запрос.
Ответы
Ответ 1
Вы можете использовать шаблон {% templatetag %}
templatetag для печати символов, которые обычно обрабатываются Django. Например:
{% templatetag openvariable %} variable {% templatetag closevariable %}
Результаты в вашем HTML:
{{ variable }}
Полный список аргументов приведен ниже: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag
Ответ 2
Вы можете просто изменить теги:
Mustache.tags = ['[[', ']]'];
Ответ 3
Если вы используете django 1.5 и более новые версии:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
Если вы застряли с django 1.2 в appengine, расширьте синтаксис django командой verbatim template, подобной этой...
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
Ответ 4
Попробуйте использовать django-mustachejs
{% load mustachejs %}
{% mustachejs "main" %}
Django-mustachejs сгенерирует следующее:
<script>Mustache.TEMPLATES=Mustache.TEMPLATES||{};Mustache.TEMPLATES['main']='<<Your template >>';</script>
Ответ 5
У меня такая же проблема, но с помощью
{% templatetag openvariable %} variable {% templatetag closevariable %}
слишком много для меня. Я просто добавил очень простой пользовательский тег шаблона:
@register.simple_tag
def mtag(tagContent):
return "{{%s}}" % tagContent
Итак, теперь я могу написать:
{% mtag "variable" %}
Ответ 6
У меня такая же проблема, поэтому большую часть времени мои переменные являются частью переводимой строки.
{% trans "The ball is {{ color }}" %}
Вы можете использовать trans temetatetag, даже если вы не предлагаете i18n.
Ответ 7
Вы можете использовать встроенный тег разделителя mustache.js, чтобы изменить теги по умолчанию, которые используют усы.
то есть.
{{=<% %>=}}
теперь вы можете сделать это:
<% variable %>