2010-12-02 22 views
52

Tengo un par de sitios Django pequeños (500 o 600 líneas de código de plantilla), y me gustaría migrarlos para usar Jinja2 ... Pero me gustaría tener una idea de cuánto trabajo va a hacer. Entonces, en general, ¿cuánto trabajo se necesita para migrar un pequeño sitio de Django a Jinja2? Y vale la pena"?Django: ¿Cambia a Jinja2?

+3

Si algo "lo vale" depende de sus criterios. ¿Qué estás intentando lograr? ¿Qué le permite a Jinja2 hacer que las plantillas de Django no lo hagan? –

+3

Principalmente me gustaría depurar más fácilmente (maldición, Django, ¿por qué ignoras variables indefinidas ?!), etiquetas de plantilla más simples, la capacidad de tener un poco más de código en las plantillas (por ejemplo, sintaxis de Python para operaciones básicas de listas y matemáticas) y, en general, parece un lenguaje "mejor diseñado". –

+5

No es suficiente para ser una respuesta, pero para mí valió la pena. Me sentía seriamente limitado por la restricción de Django sobre la lógica en las plantillas (cuánta restricción debería haber es una guerra santa, pero en * mi opinión * era demasiado, ya juzgar por tus comentarios, tú también lo crees). Cambiar a Jinja2 me permite mantener la misma sintaxis (con algunas cosas complicadas limpiadas), lo que me gusta, y debido a las características adicionales me sentí como una actualización. También me gusta la idea de que el motor de plantillas sea completamente independiente del marco que utilice. – Cameron

Respuesta

50

Si bien es sólo mi propia experiencia, me encontré con la conversión de Django para Jinja2 a valer la pena por las siguientes razones:

  1. El diseño e implementación de Jinja2 parecían más intuitivo de yo, como desarrollador de software y diseñador de plantillas;
  2. Jinja2 es más extensible (al menos en la forma en que he intentado ampliar el motor de mi plantilla);
  3. Jinja2 es más flexible en términos de permitir que se ejecute el código lógico (pero le da suficiente cuerda para colgarse);
  4. Jinja2 se considera significativamente más rápido (aunque no he hecho ningún punto de referencia, esto siempre está sujeto a debate en función de las pruebas utilizadas y, en cualquier caso, irrelevante en el tiempo total de espera para una consulta que tiene que hacer DB búsquedas);
  5. Jinja2 proporciona una salida de error significativamente más útil que Django (es decir, se remonta al número de línea en la plantilla donde se produjo el error).Editar: Según el comentario de Dor, Django da útiles mensajes de error que apuntan a la línea y el contexto de un problema, al igual que Jinja2.

Si no has tenido ningún problema con el motor de plantillas de Django, Jinja2 debería sentirse relativamente intuitivo, si acaso un poco más pulido (o al menos a mí). Además, encontré el proyecto Coffin bien escrito y razonablemente útil al convertir de Django a Jinja2 – tanto para su uso como a modo de ejemplo de cómo extender Jinja2.

Dicho todo esto, el motor de plantillas de Django es sólido y bastante capaz para la mayoría de las tareas. Creo que se está mejorando en la próxima revisión de Django, y hay un gran esfuerzo para agregar a sus capacidades por un buen número de desarrolladores dedicados. Como resultado, no hay preocupaciones de que no se apoye en el futuro a corto y mediano plazo.

Nuevamente, esa es solo mi experiencia, por lo que vale – Espero que sea útil.

+0

Eso es útil, gracias. –

+0

Django muestra la línea errónea (y las líneas que la rodean) en el código de la plantilla. – Dor

+0

@Dor: Ese puede ser el caso ahora, pero no fue en el momento en que escribí la respuesta. Arreglará. :) –

2

Por lo que ha dicho, puede que no valga la pena migrar a Jinja2. Hay filtros en las plantillas de Django que podrían ayudarlo a realizar operaciones matemáticas.

En cuanto a las operaciones de la lista, ¿de qué estás hablando exactamente? Si desea que se soporte alguna operación de lista particular en Template, entonces escriba custom filter.

También hay algunos terceros existentes math filters for Django.

Si lo piensas, es por diseño que las plantillas de Django no tienen demasiadas "construcciones de programación" en ellas. plantillas HTML deben ser tales ...

+7

Estoy de acuerdo en que las plantillas no deberían tener programación "demasiado" ... Siento que las características de Jinja 2 son un poco más pragmáticas. Mismo trato con, por ejemplo, operaciones de lista: podría escribir una etiqueta de plantilla o algo, pero siento que sería en general más pragmático si pudiera usar, por ejemplo, '{% para x en ['a', 'b']% } ... {% endfor%} '. –

+0

El enlace está dando error 404. – Wally

2

Dos proyectos que están tratando de integrar Jinja en Django con pasos de integración simples y bien ganchos con Django -

  1. Coffin
  2. Chouwa

les estoy integrando inmediato a experimentar si también funcionan con aplicaciones contrib Django como Django Admin. Pero creo que estará disponible para las aplicaciones de proyecto y el sistema de plantillas predeterminado de Django se usará en aplicaciones internas como Admin.