Mako – Ultraveloz y ligero motor de templates

  
21 de Abril de 2015   0  

Elegir un buen motor de renderizado de templates para Python no es una tarea fácil ya que existen varias opciones  muy buenas que nos ofrecen grandes resultados para nuestros proyectos. El día de hoy platicaremos sobre Mako, un motor de templates ligero y sin duda entre los más veloces que podemos encontrar en internet.

¿Que es Mako?

Como hemos mencionado anteriormente, es un motor de renderizado de templates para proyectos que corren sobre plataformas Python y como bien dice su página oficial, es un “super rápido y ligero motor de templates” que sin problemas puede alcanzar velocidades muy altas como Jinja2 (y me atrevo a decir que posiblemente hasta mayores).

reddit-motorcycles-1024x640

Mako es utilizado por reddit.com donde ofrece más de mil millones de páginas vistas al mes. Es el lenguaje de la plantilla por defecto incluido con los frameworks web Pylons y Pyramid.

pyramid-framework

Características.

  • API Super-simple. Para el uso básico, una sola clase, se necesita Plantilla:
    from mako.template import Template
    print(Template("hello ${data}!").render(data="world"))

    Para la gestión de sistema de archivos y almacenamiento en caché de la plantilla, añada la clase TemplateLookup.

  • Súper rápido. Como las plantillas se elaboran en última instancia en bytecode de Python , el enfoque de Mako es extremadamente eficiente, y fue escrito originalmente para ser tan rápido como Cheetah. Hoy en día, Mako está muy cerca de la velocidad de Jinja2, que utiliza un enfoque similar y para lo que Mako fue una inspiración.
  • Características de plantillas estándar:
    • Estructuras de control construidas a partir de código Python reales (es decir, bucles, condicionales)
    • Straight Python blocks, en línea o a nivel módulo.
  • Herencia:
    • Soporte para herencias “multi-zona”, definir cualquier número de áreas en la plantilla base para ser sobreescritas usando <% block> o <% def>.
    • Soporte para herencia de estilo  “encadenamiento” – es posible realizar la llamada next.body () para llamar el contenido “interior”.
    • La jerarquía de herencia completa es navegable en ambas direcciones (es decir, padres e hijos) desde cualquier parte de la cadena.
    • La herencia es dinámica! Especifique una función en lugar de un nombre de archivo para el cálculo de la herencia sobre la marcha para cada solicitud.
    • Soporta Python 2.6 a través de modernos 3 versiones.
    • Soporta Google App Engine.

Ejemplo de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%inherit file="base.html"/>
<%
rows = [[v for in range(0,10)] for row in range(0,10)]
%>
<table>
   % for row in rows:
       ${makerow(row)}
   % endfor
</table>
 
<%def name="makerow(row)">
    <tr>
    % for name in row:
         <td>${name}</td>\
    % endfor
    </tr>
</%def>

Instalación:

La instalación es sobre la plataforma de pypi, ejecutando la siguiente línea de código en nuestra terminal, directamente en nuestro OS o en un entorno virtual:

1
$ pip install Mako


Alex Dzul

FullStack Python / Django Developer. #jslove

Temas relacionados