Generador html/css experimental
Utiliza el propio lenguaje python para escribir html y css, permitiendo crear clases y objetos que son etiquetas o conjuntos de etiquetas, permitiendo utilizar los mecanismos de herencia y POO de python.
Supongamos una lista de enlaces, sacado de la web de Jinga:
{%foruserinusers%}
<li><ahref="{{ user.url }}">{{ user.username }}</a></li>
{%endfor%}Necesitamos "pasar" 2 variables y un bucle for, el documento necesita ser parseado y procesado por el engine.
La alternativa que intento es:
foruserinusers:
tags.append(li(userlink(user.username, Href=user.url)))A simple vista, no parece aportar mucho, sin embargo, podemos usar TODA la potencia de python, dado que ES python.
Supongamos otra página en nuestra web vamos a reutilizar nuestro userlink, que es una clase python; tan sencillo como invocarlo:
userlink(user.username, Href=user.url)Incluso, dado que es una clase definida por nosotros podriamos abreviarla:
userlink(user)Ésta podría ser nuestra clase:
classuserlink(Tag):
def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name='a'self.append=args[0].usernameself.attrs= {'href': args[0].url}Más complicado que:
<ahref="{{ user.url }}">{{ user.username }}</a>Pero infinitamente más reutilizable
También se pueden utilizar los mecanismos de herencia de python, un ejemplo, añadir el tratamiento a los nombres (Don / Doña)
classuserlink_trat(userlink):
def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
ifargs[0].sexo=='V':
list.insert(0,'Don.'+args[0].username)
elselist.insert(0,'Doña.'+args[0].username)Ya podemos usar el link con tratamiento en cualquier parte sin miedo:
userlink_trat(user)Para poder hacer lo mismo en jinga habria que replicar lo siguiente en todos los lugares en que hiciera falta:
{%ifuser.sexo=='V'%}
<ahref="{{ user.url }}">Don.{{ user.username }}</a>
{%else%}
<ahref="{{ user.url }}">Doña.{{ user.username }}</a>
{%endif%}