2011-11-17 7 views
13

Mam kilka plików html, które zawierają szablony, które będą używane przez jQuery.tmpl. Niektóre znaczniki tmpl (np. {{if...}}) wyglądają jak tagi szablonów Django i powodują TemplateSyntaxError. Czy istnieje sposób, w jaki mogę określić system szablonów Django powinien zignorować kilka linii i wypisać je dokładnie tak, jak są?Jak mogę powiedzieć szablonom Django, aby nie parsować bloku zawierającego kod, który wygląda jak znaczniki szablonów?

Odpowiedz

20

Wbudowany sposób polegałby na ręcznym opuszczaniu każdego elementu szablonu za pomocą znacznika szablonu templatetag (https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag), ale podejrzewam, że nie jest to coś, co chcesz zrobić.

To, czego naprawdę chcesz, to sposób oznaczania całego bloku jako tekstu surowego (a nie interpretowalnego), który wymaga nowego niestandardowego tagu. Może chcesz sprawdzeniu raw tag tutaj: http://www.holovaty.com/writing/django-two-phased-rendering/

EDIT: Jak Django 1.5, to jest teraz obsługiwane przez wbudowany w tagu verbatim szablonu

5

Istnieje kilka otwarty bilet do rozwiązania tego problemu: https://code.djangoproject.com/ticket/14502 i https://code.djangoproject.com/ticket/16318 można znaleźć proponowany nowy szablon tag verbatim poniżej:

""" 
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)) 
+0

myślę, że 'tag raw' jest bardziej eleganckie rozwiązanie niż tych co. Plus 'verbatim' nie obsługuje znaczników komentarza i' noparse' zwraca i pusty ciąg znaków. – Jake

+2

Jeśli uważasz, że tak, powinieneś koniecznie wypowiedzieć się na temat odpowiednich biletów. To społeczność decyduje, jakie funkcje będą wprowadzane w Django. Nie twierdzę, że jest to najlepszy sposób na zrobienie tego, ale to jest to, do czego obecnie zmierza społeczność. –

+0

Przy bliższym przyjrzeniu się jest jasne, że noparse przemiesza tokeny w bloku i ustawia je wszystkie na Tokeny Tekstu. – Jake

Powiązane problemy