[cpif] CPIF-template 0.3

Ricardo Javier Cardenes Medina ricardo.cardenes at gmail.com
Tue Jul 3 04:35:29 CEST 2007


Enas...

He dejado la última versión (0.3) de CPIF Templates en el sitio
habitual:

  http://www.not.iac.es/~rcardenes/template.py

La documentación sigue siendo válida[1], excepto que he añadido dos
etiquetas de gran importancia:

 * extends
 * block

Esto es necesario para poder reaprovechar código de una plantilla
a otra :P. Funcionamiento...

EXTENDS:

   {% extends "nombrefichero" %}

 "nombrefichero" puede ser cualquier nombre de fichero válido,
 incluyendo rutas parciales (se aceptan las absolutas... pero
 funcionarán como parciales)

 Este fichero se buscará dentro de una serie de rutas definidas como
 "repositorios de plantillas". Si se encuentra (se usará el primero
 que se encuentr), se importará (e interpretará) su código, y se
 usará como base para la plantilla actual.

 Una plantilla puede extender a otra que a su vez extienda a una
 tercera.

 Notas: Cualquier cosa que haya antes de la etiqueta "extends" formará
 parte del producto final. Sin embargo, tras la etiqueta "extends" sólo
 se tendrán en cuenta las etiquetas "block" (y su contenido, claro)

BLOCK:

   {% block nombrebloque %}
       .....
   {% endblock %}

 Dentro de esta etiqueta puede ir cualquier cosa que podrías poner en
 cualquier otra parte de una plantilla. "nombrebloque" puede ser
 lo que sea (que no contenga "blancos", ya que el parser los usa como
 separador).

 El funcionamiento básico de un bloque es sencillo: renderiza su
 contenido de forma incondicional, siempre que aparezca en el árbol
 generado por el parser, claro. ¿Qué quiere decir esto último? En caso
 de que una etiqueta "block" forme parte de una plantilla base, formará
 siempre parte del árbol generado por el parser. Sin embargo, en caso de
 que la etiqueta forme parte de una plantilla derivada (es decir, que venga
 precedida por una etiqueta "extends"), el motor comprueba si en alguna de
 las plantillas de las que deriva aparece algún otro bloque con el mismo
 nombre: en caso afirmativo, sustituye el bloque de la plantilla ancestro
 por el de la derivada; en caso negativo, se descarta el bloque.

Ejemplo tontorrón:

----- base.txt ------------------------------------------------------
Aquí va {% block palabra %}una palabra{% endblock %}
---------------------------------------------------------------------

----- child.txt -----------------------------------------------------
{% extends "base.txt" %}

{% block palabra %}algo diferente{% endblock %}
---------------------------------------------------------------------

Creo que es obvio, pero:

 - renderizar "base.txt" producirá: "Aquí va una palabra";
 - renderizar "child.txt" producirá: "Aquí va algo diferente".

Con este añadido que creo que ya se puede usar el motor para los fines
de CPIF.

Y ahora... a la cama :P

[1] Todo el mundo sabe que documentar es lo más jodido... :P, ya
    ampliaré la docu



More information about the cpif mailing list