Pregunta

He estado considerando una solución templating, aunque mis opciones son entre Mako y Genshi. Encuentro templating en Genshi un poco feo, así que estoy desplazando más hacia Mako.

He ido a preguntarse: ¿qué es tan bueno sobre el hecho de que Mako permite incrustado código Python? ¿Cómo es conveniente para el ciudadano medio?

¿No templating basta sólo que sin tener el código Python incrustado?

¿Fue útil?

Solución

A medida que el marrajo página señala, las ventajas de Mako son bastante claras: increíblemente rápida, inmediatamente familiar a cualquiera que esté práctico con Python en términos de sintaxis y características.

Genshi elige "interpretación" en lugar de la generación de código por delante de los tiempos de Python (en función de su FAQ , eso es para la claridad de los mensajes de error) y un enfoque de la "plena competencia" para Python (por ejemplo, mediante el uso de XPath para los selectores, xinclude en lugar de la herencia, etc.) por lo que podría ser más natural a las personas que no conocen Python, pero que son muy competente con XML.

Entonces, ¿cuál es su "público"? Si los programadores de Python, sugiero Mako (para la velocidad y la familiaridad); si los expertos XML que se sienten incómodos con Python, Genshi podrían ser un mejor ajuste (para la "plena competencia de Python" enfoque y más partido a la cultura XML).

Usted menciona "el ciudadano medio", pero Joe no sabe Python y XPath es un profundo y oscuro misterio para él; Si eso era realmente su público, otros sistemas de plantillas como la fuerza de Django en realidad ser un mejor ajuste (ayuda que le permite evitar meterse en problemas; -).

Otros consejos

  

¿No templating basta sólo que sin tener el código Python incrustado?

Sólo si su lenguaje de plantillas tiene suficiente funcionalidad lógica de que es esencialmente un lenguaje de script en sí mismo. Y en ese momento, es posible que tan bien ha utilizado Python.

Más sitios implicados a menudo necesitan la lógica de presentación complejas y estructuras de plantilla no triviales como secciones repetidas en diferentes lugares / páginas y árboles recursivas. Esto no es divertido si su lenguaje de plantillas ata las manos detrás de la espalda, ya que toma la posición religiosa que "el código en la plantilla son malos".

A continuación, que acaba de terminar de escribir funciones auxiliares de presentación en su lógica de negocio Python, lo que es peor mezcla de presentación y aplicación de la lógica de lo que tenía al principio. Idiomas que tienen el poder lejos de ti porque no confían en usted para utilizarlo con buen gusto son cojos.

Esto parece ser un poco de una cuestión religiosa. las plantillas de Django toman una línea dura: no hay código en las plantillas. Hacen esto debido a su historia como un sistema utilizado en tiendas donde hay una clara separación entre los que escriben el código y los que crean páginas. Otros (tal vez) no hacen tal distinción clara, y se sentiría más cómodo tener una línea más flexible entre el diseño y la lógica.

Todo se reduce a una cuestión de gusto.

Genshi se concibe (léase: sesgada, optimizado) para la generación de documentos XML (incluso si lo hace la oferta de apoyo para la generación de cualquier tipo de documento de texto). Mako plantillas de Django y se conciben como texto genérico sistema de plantillas. Evoque también, pero con una diferencia fundamental que hace que la opción de diseño para permitir únicamente pitón Las expresiones en las plantillas, es decir, sin pitón declaraciones .

Uno de los resultados netos importante de esto es que Evoque es capaz de ejecutar la evaluación de plantilla en una caja de arena - es decir, que con seguridad podría dar a los usuarios no confiables escritura acceso al código fuente de una plantilla - una característica que es prácticamente imposible para los motores de plantilla que también permitirá la incorporación de declaraciones pitón . Ah, y sin perder de cualquier función en una comparación directa, Evoque es en algunos casos, hasta más rápido que Mako, y también se ejecuta en Python 3.

Se puede disciplinarse para no inyectar cualquier código Python dentro de la plantilla a menos que sea realmente el último recurso para hacer el trabajo. Me he enfrentado a un problema similar con plantillas de Django en el que tengo que hacer un poco de gimnasia CSS graves para mostrar el contenido de mi. Si pudiera haber utilizado algún código Python en la plantilla, que habría sido mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top