我有一些html文件包含jQuery.tmpl使用的模板。一些tmpl标签(如{{if...}}
)看起来像Django模板标签并导致TemplateSyntaxError。有没有办法可以指定Django模板系统应该忽略几行并完全按原样输出它们?
答案 0 :(得分:21)
从Django 1.5开始,现在由内置的verbatim
模板标记处理。
在旧版本的Django中,内置的方法是使用templatetag
模板标记(https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag)手动转义每个模板项,但我怀疑这不是你想要做的
您真正想要的是将整个块标记为原始(而不是可解释)文本的方法,这需要新的自定义标记。您可以在此处查看raw
代码:http://www.holovaty.com/writing/django-two-phased-rendering/
答案 1 :(得分:5)
有几个开放票可以解决此问题:https://code.djangoproject.com/ticket/14502和https://code.djangoproject.com/ticket/16318
您可以在下方找到建议的新模板标记verbatim
:
"""
From https://gist.github.com/1313862
"""
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))