2010-10-26 13 views
21

Hoy intento jugar con declaraciones jquery-tmpl {{if}} & {{else}}.¡Las etiquetas de plantilla de jquery entran en conflicto con la plantilla de Django!

<script id="mission-dialog" type="text/x-jquery-tmpl"> 
    <h3>${name}</h3> 
    <p>${description}</p> 
    <ul> 
     {{each(i,cond) conditions.data}} 
     <li> 
      <img src="${cond.image}"/> 
      <h4>${cond.name}</h4> 
      <p class="status">${cond.status.value}/${cond.status.max}</p> 
     </li> 
     {{/each}} 
    </ul> 
</script> 

Pero como sabes {{}} está reservado también para la plantilla django. Entonces django emitirá TemplateSyntaxError que no puede analizarlo.

¿Cómo puedo resolver este problema?


actualización:

me encontré con un%> etiqueta personalizada prima implementación funcional <% (GPL) de aquí.

http://www.holovaty.com/writing/django-two-phased-rendering/

Respuesta

13

utilizar la etiqueta templatetag plantilla para hacer los soportes:

{% templatetag openvariable %}each(i,cond) conditions.data{% templatetag closevariable %} 

Es un poco más incómoda, por lo que una etiqueta raw plantilla ha sido propuesto para Django 1.3.

+0

Gracias Daniel! Pero es demasiado complicado como dijiste. Debería esperar a Django 1.3 ...:) –

+1

o poner códigos de jQuery en plantillas que no están en html pero en algún lugar en el código y lo pasan a la plantilla .. :( –

+0

En mi caso de uso, los clientes CMS está aplicando plantillas de Django en mis archivos js. Los conflictos van realmente tan profundo como la declaración del motor de plantillas jQuery sí – CharlesTWall3

2

Hay algunas soluciones mencionadas aquí:

https://github.com/nje/jquery-tmpl/issues#issue/17 - Editar: Antiguo repo

https://github.com/jquery/jquery-tmpl/issues/#issue/74

Mi favorita es la etiqueta de la plantilla {% verbatim %} que le permite crear plantillas de jQuery desde dentro de las de Django.

0

estoy usando Django 1.3 y añadiendo

{% raw %} this should be ignored by django's template framework {% endraw %} 

a mi archivo html.

el servidor devuelve con un:

etiqueta de bloque no válido: 'prima'

También en los documentos me parece que no puede encontrar información sobre esta etiqueta que está hablando.

https://docs.djangoproject.com/en/1.3/ref/templates/builtins/

+0

etiqueta de crudo podría no ser incluido Django 1.3 embargo Así que hay que incluir códigos de etiquetas personalizadas desde aquí:.. http://www.holovaty.com/writing/django-two-phased-rendering / –

0

que he encontrado por defecto para ser útil si se admite ninguna etiqueta 'textualmente'. se ve así:

{{ some_undefined_variable|default: '....here goes the subject template....'}} 

PS. Nota para los usuarios de ChicagoBoss, que no admite etiquetas "verbatim" en ErlyDTL.

Cuestiones relacionadas