2012-10-01 21 views
16

Tengo 10 archivos html con los nombres 1.html, 2.html ..etc Lo que quiero es una variable, un cierto archivo debe incluirse en la plantilla.Cómo incluir plantillas dinámicamente en Django usando la etiqueta "incluir"

p. Ej.

{% if foo.paid %} 
    {% include "foo/customization/{{ foo.id }}.html" %} 
{% endif %} 

¿Esto es posible? Porque foo.id no se está traduciendo antes de que funcione la etiqueta de inclusión. Como resultado, da un error. ¿Cómo se puede manejar este problema de una manera diferente? ¿Debo crear una etiqueta de plantilla personalizada para esto?

Respuesta

26

Puede hacerlo con add filter y with statement.

{% if foo.paid %} 
    {% with template_name=foo.id|stringformat:"s"|add:".html" %} 
     {% include "foo/customization/"|add:template_name %} 
    {% endwith %} 
{% endif %} 

En primer lugar se construye una template_name, que consisten en foo.id en formato de cadena concatenada con .html. Luego la pasa a la etiqueta include, concatenada con la ruta al directorio de la plantilla.

Cuestiones relacionadas