Para un nuevo proyecto estamos escribiendo documentación sobre el sistema de plantilla Django. Usamos Django también para el proyecto de documentación, por lo que Django recoge todas nuestras variables de ejemplo en el código de muestra e intenta renderizarlas. La única forma que hemos encontrado para evitar esto es usar {% templatetag %}, pero eso hace que nuestro código sea realmente ilegible. ¿Hay alguna forma de que Django ignore todas las variables de plantilla en una sección específica?Manera fácil de escapar Variables de plantilla Django
Respuesta
Debido a las limitaciones de Django template lexer (como ser un kludgy hack), esto es imposible. Sin embargo, si usted está dispuesto a poner su código de ejemplo en archivos separados, puede utilizar la etiqueta de ssi
:
{% ssi /path/to/my/code/examples/example01.html %}
y no va a analizar el archivo, basta con incluir textualmente. Sin embargo, esto también tiene limitaciones en el sentido de que no puede usar variables en la ruta de inclusión (es decir, si mueve las ubicaciones de la plantilla, debe reescribir o al menos buscar y reemplazar sus archivos de plantilla), y debe colocar el include ruta (es decir, /path/to/my/code/examples
) en la configuración ALLOWED_INCLUDE_ROOTS
en su settings.py
. (Consulte http://docs.djangoproject.com/en/dev/ref/templates/builtins/#ssi.)
+1 por "me gusta ser un kludgy hack". –
Ha, nuestra solución inicial fue hacer esto con ajax, o usar "[" en lugar de "{" y reemplazarlos con javascript. Si nadie más logrará algo mejor, supongo que usted lo respondió. –
Me gusta más tu idea de "'[' y cambiar con JS". – lawrence
Una posible solución es escribir las plantillas como de costumbre (con {{ x }}
), pero guárdelas como .txt (o cualquier otra extensión que desee). Escriba un script que se ejecuta sobre estos archivos, y automáticamente crea el .html para usted, haciendo el reverso de templatetag (reemplazando {{
con {% templatetag openvariable %}
, etc.). Asegúrese de que el código se ejecute después de actualizar las plantillas.
Lo resolví agregando una etiqueta de plantilla "include_raw" que se comporta como la etiqueta incorporada "include", pero simplemente no analiza ni procesa el archivo que se le pasa. Estoy ejecutando Django 1.2 en App Engine.
Crear un módulo de etiquetas (tags.py):
from django.template import loader
from google.appengine.ext.webapp import template
register = template.create_template_register()
@register.simple_tag
def include_raw(path):
return loader.find_template(path)[0]
Puedes verlo:
from google.appengine.ext.webapp import template
template.register_template_library("tags")
usarlo:
{% include_raw "this-will-be-included-verbatim.html" %}
Si la fuente es HTML, la solución más fácil sería reemplazar "{" y "}" con sus respectivas entidades HTML:
{
se convierte en {
}
convierte }
Ejemplo:
<code>
To include some other file, you can use the {% include %} template tag.
To include a variable, use {%{% varname }%}%.
</code>
Django 1.5 resuelve este problema con la etiqueta verbatim plantilla:
{% verbatim myblock %}
Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
{% endverbatim myblock %}
Aquí es una manera elegante de resolver al problema para Djan o 1.4. Es una etiqueta personalizada de Django. Simplemente crea un módulo verbatim_templatetag.No se analiza la carga {%}% verbatim_templatetag
Todo entre {% textualmente%} y {%}% endverbatim: py contiene el siguiente código:
"""
jQuery templates use constructs like:
{{if condition}} print something{{/if}}
This, of course, completely screws up Django templates,
because Django thinks {{ and }} mean something.
Wrap {% verbatim %} and {% endverbatim %} around those
blocks of jQuery templates and this will try its best
to output the contents with no changes.
"""
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))
Luego, en su plantilla.
Código de https://gist.github.com/ericflo/629508
- 1. Django, variables de plantilla globales
- 2. ¿Cómo escapar {{o}} en la plantilla django?
- 3. Variables de plantilla Django y Javascript
- 4. plantilla de Django - Nueva declaración de variables
- 5. Django: Asignación de variables en la plantilla
- 6. Cómo encontrar variables de plantilla no utilizadas en Django
- 7. plantillas de Django escapar
- 8. ¿Puedo escapar caracteres en nombres de variables?
- 9. plantilla de renderizado Django dentro de una plantilla
- 10. Manera fácil de AJAX WebControls
- 11. manera fácil de revertir cadena
- 12. manera fácil de usar FindControl ("")
- 13. ¿Manera fácil de combinar listas?
- 14. plantilla de Django forloop.counter pregunta
- 15. Módulo% en plantilla de Django
- 16. MATLAB manera más fácil de asignar elementos de un vector de variables individuales
- 17. mejor manera de escapar y crear una babosa
- 18. Python Django Global Variables
- 19. Django: accediendo a las variables de sesión desde dentro de una plantilla?
- 20. ¿Cuál es una manera fácil de imprimir una cadena de varias líneas sin sustitución de variables en Perl?
- 21. ¿Existe alguna manera fácil de autocompletar las variables de bloque en xcode?
- 22. Elección dinámica de la plantilla de etiqueta de inclusión Django
- 23. función de Python en la plantilla de Django
- 24. Clase de plantilla PHP con variables?
- 25. ¿Cómo se representa "{{" en una plantilla django?
- 26. ¿Cómo escapar de los delimitadores Twig en una plantilla Twig?
- 27. Django: Mejor práctica para URL conf, plantilla de plantilla url
- 28. ¿Cómo obtengo todas las variables definidas en una plantilla de Django?
- 29. url etiqueta de plantilla en la plantilla de Django
- 30. ¿Existe una manera fácil de localizar (preservar) todas las "variables mágicas" como $ 1, $ & etc.?
1 - Buena pregunta. Yo también me gustaría saber la respuesta. – sberry