2011-11-17 13 views
13

Tengo algunos archivos html que incluyen plantillas para ser utilizados por jQuery.tmpl. Algunas etiquetas tmpl (como {{if...}}) se parecen a las etiquetas de plantilla de Django y causan un error TemplateSyntaxError. ¿Hay alguna manera de que pueda especificar que el sistema de plantillas de Django debe ignorar unas pocas líneas y darlas como están?¿Cómo puedo decirle a las plantillas de Django que no analicen un bloque que contiene código que se parece a las etiquetas de plantilla?

Respuesta

20

La forma integrada sería escapar manualmente cada elemento de la plantilla con la etiqueta templatetag plantilla (https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag), pero sospecho que eso no es lo que quiere hacer.

Lo que realmente quiere es una forma de marcar un bloque conjunto como (en lugar de interpretables) texto sin formato, lo que requiere una nueva etiqueta personalizada. Es posible que desee revisar la etiqueta raw aquí: http://www.holovaty.com/writing/django-two-phased-rendering/

EDIT: A partir de Django 1.5, esto es ahora manejado por el incorporado en la etiqueta verbatim plantilla

5

Hay un billete abierto par para abordar esta cuestión: https://code.djangoproject.com/ticket/14502 y https://code.djangoproject.com/ticket/16318 se puede encontrar una nueva etiqueta de plantilla propuesta verbatim a continuación:

""" 
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

creo que la etiqueta 'raw' es una solución más elegante que estos queridos. Además 'verbatim' no maneja las etiquetas de comentarios y los retornos' noparse' y la cadena vacía. – Jake

+2

Si te sientes así, asegúrate de comentar las entradas relevantes. Es la comunidad la que decide qué características están entrando en Django. No digo que esta sea la mejor manera de hacerlo, pero esto es hacia lo que la comunidad se está moviendo actualmente. –

+0

En una inspección más cercana, es claro que noparse cruza los tokens en el bloque y los establece a tokens de texto. – Jake

Cuestiones relacionadas