Paquete slimish_jinja ofrece Delgado sintaxis plantillas para Jinja2.
Instalación
Estaré subiendo a PyPI pronto. Para entonces, clonar el repositorio. Ejemplos de utilizarlo como extensión `Jinja2 (jinja_demo.py)`, `con Frasco (flask_demo.py)` y standalone` (convert.py y demo.py) `se lían.
Si desea utilizarlo para cualquier otro propósito, el `lexer - lexer.py` y` analizador - parser.py` son bastante simples. `Lexer` lee la entrada por líneas y genera tokens. `Parser` implementa un analizador descendente recursivo rodado mano.
Para una consulta rápida, este delgado ::
& Nbsp; & nbsp; & nbsp; ! 5
& Nbsp; & nbsp; & nbsp; html
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; cabeza
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Inline contenido estático.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; título
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; título -bloque
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | Slimish-Jinja Ejemplo
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Auto etiqueta de cierre con atributos.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; meta name = "keywords" content = "idioma de la plantilla"
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; guión
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Tag jinja vacía.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; block guión
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / 'Id' y acceso directo "clase".
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; cuerpo # home.fluid.liquid
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Anidado contenido estático.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; h1
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | Esta es mi cabecera.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / 'Div' con 'id' y acceso directo "clase".
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; # Contents.main
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Tag html vacía.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Div
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p = contenido dinámico
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | Anidado dyanmic = contenido
Sangría izquierda se conserva en los bloques de texto.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Mezcla html está bien también.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | ThoughtNirvana
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Atributos dinámico.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ul class = "= user_class"
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / Tag Jinja.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; usuario -para usuarios
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; li = user.name
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; user.last_name -si
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; li = user.last_name
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; user.middle_name -elif
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; li = user.middle_name
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; -else
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; li No se encontró al usuario.
se convierte en:
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% Block title%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Slimish-Jinja Ejemplo
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {%}% Endblock
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Este es mi cabecera.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
Dynamic {{Contenido}}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Dyanmic anidado {{Contenido}} & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Sangría izquierda se conserva en los bloques de texto.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ThoughtNirvana
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
- {{user.name}}
- {{user.last_name}}
- {{user.middle_name}}
- No se encontró al usuario.
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% Para el usuario en usuarios%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% If%} user.last_name
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% User.middle_name elif%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% Terminara si%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% Else%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {% Endfor%}
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp;