2012-09-02 16 views
8

Quiero apuntar a un archivo HTML diferente basado en una variable. Estoy usando incluir en el siguiente formato:Usar incluir para señalar dinámicamente a HTML

{% include 'templates/case/{{cid}}/intro.html' %} 

Esto genera un error:

TemplateNotFound: templates/case/{{cid}}/intro.html 

En cuanto a esto sé Jinja2 no resuelve la variable en tiempo de ejecución. El valor de cid = ABC (ABC es el nombre de una carpeta de la ruta), por lo que espera que la trayectoria total asciende a:

templates/case/ABC/intro.html 

Si utilizo este camino resuelta directamente en include funciona.

¿Cómo puedo resolver esto?

Respuesta

2

Siempre se puede calcular la ruta completa en el código de vista y pasarlo a la plantilla, en ese punto, eliminar las comillas y las llaves alrededor de la variable.

Al hacer esto, desconfíe de path traversal attacks.

+0

Thomas, gracias por la respuesta. Si me refiero a que paso la ruta completa en una variable: vid = 'templates/case/{{cid}}/intro.html' y luego la uso en el inclide .... {% include '{{vid}}' %}. Intenté eso ... esto da el mismo error ... TemplateNotFound. – Utpal

+0

@Utpal ¿Intentó eliminar el '{{}}' y simplemente usó {% include vid%}? Aunque podría estar fuera, no he usado a Jinja por un tiempo, pero espero que funcione de manera similar a django en ese sentido. Es posible que desee verificar esta pregunta similar: http://stackoverflow.com/questions/6101864/dynamic-use-of-templates-in-jinja2 –

+0

Gracias Thomas Ton. Eliminar el '{{}}' funciona perfectamente. Sin embargo, verificaría los "ataques de ruta cruzada" de los que me advertiste. – Utpal

2

encontrado la respuesta en otra pregunta desbordamiento de pila here:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %} 
6

Así es como para pasar el código directamente a través incluir

{% include "templates/case/"+cid+"/intro.html" %} 
+0

Esto funcionó para mí con Nunjucks – colmjude

9

Al menos en Jinja2 2.7.1 funciona esto:

{% include 'templates/case/%s/intro.html' % cid %} 
Cuestiones relacionadas