2011-10-14 18 views

Respuesta

52

Creo que está buscando la etiqueta de plantilla templatetag.

A medida que la ligada a los estados doc,

Dado que el sistema de plantillas no tiene el concepto de "escapar", para mostrar uno de los bits usados ​​en etiquetas de plantilla, se debe utilizar la etiqueta {% templatetag %}.

Por ejemplo:

<p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p> 

aparecerá como tal:

<p>"{{ some text }}"</p> 
+0

Tengo dos preguntas: 1. Por qué django doc no menciona templatetag en [limitations-with-string-literals] (https://docs.djangoproject.com/en/1.11/ref/templates/api/# limitaciones-con-cadena-literales); 2. ¿Qué puedo hacer si deseo escapar con el filtro de plantilla? –

10

Usted puede intentar escapar con carácter HTML No usa como:

{= &#123;

} = &#125;

<p>"&#123;&#123; some text &#125;&#125;"</p> 

Pruébalo en su navegador.

2

Otra opción sería añadir un word joiner (ancho cero espacio no-break) entre cada corchete:

<p>"{&#8288;{ some text }&#8288;}"</p> 
2

This template tag (diseñado para su uso con jQuery) podría hacer el truco. Te permite ajustar contenido que no quieres que Django interprete como variables con una etiqueta de plantilla.

20

Edición: Realmente no lo recomiendo porque no es muy limpio, pero sigue siendo una opción.

Estaba buscando una que pudiera usar con las plantillas de JQuery y pensé en una forma de hacerlo sin etiquetas o filtros. Esto es tan corto que pude conseguirlo:

{{ "{{ any text }" }}} 

se imprime como:

{{ any text }} 

¿Por qué funciona? Cualquier texto dentro de {{}} se muestra como está, siempre que no tenga dos llaves de cierre}} en una fila. Luego hay tres corchetes en una fila, django interpreta dos primeros como el final de la variable dejando un corchete de cierre adicional.

105

Django 1.5 introdujo {% verbatim %} plantilla de etiqueta.Se detiene la plantilla de análisis sintáctico contenido de esta etiqueta:

{% verbatim %} 
    {{ var }} 
{% endverbatim %} 

será mostrado como:

{{ var }} 
+1

Esta es la manera más directa. +1 – ProfNandaa

+1

Si bien 'verbatim' generalmente es útil, el bug de Django https://code.djangoproject.com/ticket/23424 lo hace problemático para este uso específico. Por ejemplo esto falla: {%% verbatim} {{{% endverbatim%} {% hola textualmente%}}} {%}% endverbatim La palabra 'palabra por palabra' en realidad aparece en el texto representado ... –

3

Aunque las respuestas anteriores pueden resolver el problema original, añado algún artilugio por aquí para aquellos que están rascándose sus cabezas como yo.

Algunas veces, queremos renderizar un solo corchete seguido de una variable. Por ejemplo, en BibTeX, puede haber algo parecido a esto:

@MISC{hu2012-spectral, 
    author = {Hu, Pili}, 
    title = {Spectral Clustering Survey}, 
    howpublished = {GitHub, https://github.com/hupili/tutorial/tree/master/spectral-clustering}, 
    month = {May}, 
    year = {2012} 
} 

Esos campos de babero provienen de variables de plantilla. Si escribe

title = {{{title}}}, 

jinja no puede compilar y generar un error. Si escribe

title = { {{title}} }, 

habrá espacios en blanco adicionales. El truco consiste en almacenar '{' y '}' como variables y usarlas más tarde.

{% set lb = '{' %} 
{% set rb = '}' %} 
... 
@MISC{{lb}}{{ meta.bib_key }}, 
    author = {{lb}}Hu, Pili{{rb}}, 
    title = {{lb}}{{ meta.title }}{{rb}}, 
    howpublished = {{lb}}GitHub, https://github.com/hupili/tutorial/tree/master/{{ auto.path}}{{rb}}, 
    month = {{lb}}{{ meta.month }}{{rb}}, 
    year = {{lb}}{{ meta.year }}{{rb}} 
} 

Esto parece torpe pero es lo mejor que he encontrado hasta ahora. Si tiene una solución más limpia, por favor dígame.

+0

Tenga en cuenta que la entidad HTML mencionada anteriormente no se aplica aquí. Queremos el texto en bruto '{' en BiBTeX DB, en lugar de un '{' visto desde el navegador. –

+1

Agradable: hice una propiedad en mi Modelo donde devuelvo la variable como una cadena latexconform, p. return '{Autor}' –

1

Jinja, que es lo que se utiliza para las plantillas, ofrece varias sugerencias para escapar here. Lo que ha funcionado mejor para mí está usando algo como "{% raw %}{{ some text }}{% endraw %}"

7

si simplemente necesita utilizar {{}} como una variable de marco de plantilla como AngularJS, a continuación, siguiendo quizá más simple:

en su <app path>/templatetags/ngvar.py, añadir

from django import template 
register = template.Library() 

@register.simple_tag 
def ngvar(var_name): 
    return "{{%s}}" % var_name 

y en la plantilla, no

{% load ngvar %} 
{% ngvar "variable name" %} 

si ngvar.py es la primera etiqueta de plantilla, a continuación, asegúrese de añadir __init__.py archivo en el directorio templatetags

1

que puede ser resuelto por avoing backets angulares adyacentes, si su interior el código Javascript a continuación, se puede escribir

'{'+'{address.'+key+'}}' 

Utilicé esto para imprimir variables jinja en otra plantilla, usando javascript.

Cuestiones relacionadas