2011-12-19 20 views
5

Un amigo y desarrollador que respeto recientemente me aconsejó que evite usar 'Incluye' en las plantillas de django. La suma de su argumento fue que incluye son 'malvados'.Django Includes - are they evil?

Tengo problemas para entender la lógica; Mi opinión de novato es que son una gran manera de organizar trozos de html reutilizables, y en lugar de tener que editar html en varias ubicaciones, simplemente puedo editarlo en uno cuando se deben hacer cambios.

¿Qué piensan todos los genios? Por favor, proporcione algunos Pro y Con de usar incluye en las plantillas de Django

+0

si la suma de la lógica de alguien es 'esto es malo', ¡eso no es lógico! Esto es tan cierto para los desarrolladores como lo es para las personas religiosas :) – Spacedman

Respuesta

9

Parece una opinión un poco extraña. Incluye una parte perfectamente válida del lenguaje de plantilla, lo han sido desde el día 1 y nunca se recomendó o desaconsejó AFAIK.

Su amigo podría tratar de decir que debe confiar más en la herencia de la plantilla (que es una especie de opuesto incluir). Eso es cierto en la medida de lo posible: la mayoría de las veces es mejor componer las plantillas de bloques que sobrescriben o amplían las definidas en las plantillas principales. Pero definitivamente hay un caso de uso para incluye.

La única otra razón por la que podría decir que sería debido al ataque del sistema de archivos agregado al cargar incluye plantillas del disco. En ese caso, definitivamente está fuera de lugar - de nuevo, el modelo de herencia de plantilla que definitivamente es recomienda tendría exactamente el mismo golpe; y ambos pueden evitarse utilizando el cargador de sistema de archivos de caché opcional.

3

Según lo mencionado por Daniel, los includes son perfectamente válidos por las razones que él mencionó. Como tal, es difícil dar Pro y Con porque realmente depende de lo que estás tratando de lograr.

En general, es mejor definir los elementos comunes de un sitio web dentro de las etiquetas de bloque en una plantilla base y usar la herencia de plantilla para cambiar las partes que necesita en cada página. Sin embargo, si simplemente necesita reutilizar un fragmento de texto en muchos lugares, un 'incluye' sería perfecto.

Un punto importante a tener en cuenta es que includes no puede contener etiquetas de bloque, ya que se representan por sí mismas sin ningún conocimiento de la página principal. Para comprender mejor esto, vea la nota del template docs on includes o este (no error) bug report. Si encuentra que necesita esta funcionalidad, puede valer la pena considerar si debe mover el archivo incluido en una plantilla base dentro de una etiqueta de bloque.

2

Él podría estar diciendo que sería mejor escribir etiquetas personalizadas. Así que en lugar de tener:

{% for post in blog %} 
{% include "blog.tmpl" %} 
{% endfor %} 

que debe hacer:

{% for post in blog %} 
{% formatPost post %} 
{% endfor %} 

El incluyen método se basa en la entrada de blog de estar en un objeto llamado 'post', mientras que el método de etiquetas personalizadas le permite formatear nada. Por ejemplo, si tiene una página que comparó dos entradas de blog, que le enviarlos como como 'post1' y 'post2' en el contexto y hacer:

<h1>John Said</h1> 
    {% formatPost post1 %} 
    <h1>And Fred Said</h1> 
    {% formatPost post2 %} 

Mucho más reutilizable. Con includes tendrías que cambiar el nombre de cada post1 y post2 como 'post' y luego incluir la plantilla ...

Cuestiones relacionadas