2012-06-02 14 views
16

Yoherencia de plantilla múltiple de django: ¿es este el estilo correcto?

así que tengo una base.html:

<html> 
    <body> 
     <div id="header"> ... </div> 
     {% block main %}{% endblock %} 
     <div id="footer"> ... </div> 
    </body> 
</html> 

y también tengo una página que muestra mensajes de usuarios:

{% extends base.html %| 
{% block main%} 
    <h1>welcome to yours posts hangout!</h1> 

     ... snazzy code here that shows all the posts ... 

{% endblock%} 

ahora, el problema es, tal vez tengo otra página como esta:

{% extends base.html %| 
{% block main%} 
    <h1>look at all posts by all users!</h1> 

     ... snazzy code here that shows all the posts by all the users ... 

{% endblock%} 

porque todos pertenecemos a mensa, podemos ver que el código elegante que tengo está siendo repetido - dos veces (para diversión tautológica!)

no quiero repetir este código - quiero decir, si va a ser una gran molestia lo haré, pero de lo contrario hubiera como la página que tiene el código de snazzy definido, y luego desliza los pequeños cambios arriba y (posiblemente) debajo.

mi comprensión de las plantillas es inestable, creo que esta es la forma de hacerlo. ¿hay una forma mejor/estandarizada?

snazzy.html:

{% extends base.html %| 
    {% block aboveSnazzy%} 
    {% endblock %} 

     ... snazzy code here that shows all the posts by all the users ... 

    {% block belowSnazzy%} 
    {% endblock %} 
{% endblock%} 

y luego para cada una de las diferentes piezas, i puedo tener:

usersArea.html:

{% extends snazzy.html %| 
    {% block aboveSnazzy%} 
     <h1>welcome to yours posts hangout!</h1> 
    {% endblock %} 


    {% block belowSnazzy%} 
     <h1>i didn't think this far ahead in the example</h1> 
    {% endblock %} 
{% endblock%} 

etc etc para las otras piezas demasiado !

bien, entonces sé que puedo simplemente enviar un parámetro con un encabezado diferente o lo que sea - pretendemos que las cosas anteriores de Snazzy son, no sé, mostrando alguna otra plantilla que me gustaría o haciendo algo no trivial. ¿Es lo que he detallado más arriba que la "manera" de hacerlo?

¡salud!

Respuesta

19

Yo. :-)

La respuesta depende de cuánto tengan en común sus plantillas.

  • si sus plantillas tienen un mucho en común, por ejemplo son las páginas de alguna sección de su sitio, o simplemente strucure muy común, la forma en que ha descrito es la mejor. Cree otra plantilla base, agregue más bloques y herede la forma. Sólo creo que puedes usar algunos nombres más descriptivos para el bloque, por ejemplo

    {% extends base.html %| 
    {% block page_heading %}{% endblock %} 
        ... snazzy code here that shows all the posts by all the users ... 
    {% block extra_content %}{% endblock %} 
    
  • si las plantillas no tiene un ruido de fondo en común, pero comparte algunos bloques de contenido específico, es otra situación. Es difícil hacer una estructura de herencia adecuada aquí. Para que pueda usar {% include %} aquí: Por ejemplo, cree otra plantilla que muestre publicaciones (código atractivo que muestre todas las publicaciones), por ejemplo _list_posts.html. Puede crear otra plantilla que muestre publicaciones (código llamativo que muestra todas las publicaciones), por ejemplo _list_posts.html. Luego úselo en plantillas para niños.

    {% extends base.html %| 
    {% block main%} 
    <h1>welcome to yours posts hangout!</h1> 
    {% include '_list_posts.html' %} 
    {% endblock%} 
    

    También puede utilizar inclusion tag para eso.

¿Qué manera de elegir? Intente responder la pregunta: ¿pueden (y deberían) tener estas dos plantillas un antecesor común? En caso afirmativo, vaya a la primera variación, si no, para la segunda.

+0

Thankyo! No sabía sobre las etiquetas de inclusión/inclusión. ¡Los echaré un vistazo! – bharal

Cuestiones relacionadas