Подтвердить что ты не робот

Как я могу описать шаблоны Django, чтобы не анализировать блок, содержащий код, который выглядит как теги шаблонов?

У меня есть некоторые html файлы, содержащие шаблоны, которые будут использоваться jQuery.tmpl. Некоторые теги tmpl (например, {{if...}}) выглядят как теги шаблона Django и вызывают TemplateSyntaxError. Есть ли способ, которым я могу указать систему шаблонов Django, должен игнорировать несколько строк и выводить их точно так, как они есть?

4b9b3361

Ответ 1

Встроенный способ заключается в том, чтобы вручную удалить каждый элемент шаблона с тегом templatetag шаблона (https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag), но я подозреваю, что это не то, что вы хотите сделать.

То, что вы действительно хотите, - это способ отметить целый блок как необработанный (а не интерпретируемый) текст, для которого требуется новый настраиваемый тег. Вы можете проверить тег raw здесь: http://www.holovaty.com/writing/django-two-phased-rendering/

EDIT: с Django 1.5 это теперь обрабатывается встроенным тегом verbatim

Ответ 2

Есть пара открытых билетов для решения этой проблемы: 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))