¿Algún inconveniente o inconveniente para usar las plantillas de Jinja2 en Django?
templates frameworks (9)
Después de leer la documentación de Jinja2, estoy interesado en emplearla en futuros proyectos de Django. Sin embargo, me pregunto si alguien ha encontrado inconvenientes o errores al usar plantillas de Jinja2 con Django. Si es así, ¿cómo trabajaste con ellos?
Tampoco me importaría escuchar experiencias positivas, solo para obtener una buena muestra de lo mejor y lo peor de Jinja2.
Todavía no he usado Jinja2 con un sitio real de Django, pero sí convertí una aplicación usando plantillas de Django en modo independiente en plantillas de Jinja2. El único (muy pequeño) problema que encontré fue la falta de la etiqueta de la plantilla {% spaceless%}.
Extender Jinja2 es mucho más difícil que el sistema de plantillas de Django (estoy hablando de templatetags). Mientras que la mayoría de las funcionalidades de etiquetas de inclusión se pueden lograr usando macros en Jinja (incluso parecen ser más apropiadas), escribir etiquetas un poco más complicadas es realmente difícil en Jinja (mira los documentos por ti mismo).
Aparte de eso, el único obstáculo son los hábitos basados en Django ...;)
Uso Jinja2 en algunos de mis proyectos y amo la expresividad extra que me proporciona. Puedo mantener mi lógica de presentación y lógica de aplicación separadas, pero no tengo que hacer todo lo posible para llamar a una función / método que he diseñado específicamente para mi capa de presentación.
Además de lo que ya se ha enumerado en otros carteles, he aquí algunas cosas que he encontrado:
- La aplicación de administración está estrechamente unida a las plantillas de Django
- Las vistas y decoradores predeterminados que vienen con la aplicación Auth (y en cualquier otro lugar) se acoplan a las plantillas de Django, por lo que es posible que tenga que duplicar el esfuerzo si desea usar sus plantillas Jinja2 para iniciar sesión / cerrar sesión, etc.
Desde el punto de vista del comportamiento, las plantillas de Django escaparán a su salida de forma predeterminada, mientras que Jinja2 no lo hará. Creo que cualquiera de los enfoques tiene sus propios méritos, pero debes tenerlo en cuenta si cambias entre los dos.
He documentado varias consideraciones de sintaxis, configuración, filtro e interoperabilidad para Django -> Jinja2 en mi wiki
Se ha agregado un nuevo código en el troncal de Django que le permite escribir clases de TemplateLoaders y plantillas que se pueden usar para trabajar con diferentes lenguajes de plantilla. Se han agregado documentos para ello en http://docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-language , y estará en la versión 1.2. Esto debería eliminar la mayoría de los problemas con cosas como usar plantillas personalizadas para iniciar sesión, cerrar sesión, administrar, etc.
Una solución alternativa es usar una capa encima de Django, como Chouwa o Djinja2. Tendrá problemas para obtener vistas integradas de Django para usar sus plantillas, pero funciona si no desea usar el enlace troncal de Django.
Una vez que hayas hecho cualquiera de estos, el único problema importante es que la mayoría de las cosas que Django expone a las plantillas (especialmente para el marco de comentarios) se exponen en etiquetas personalizadas, que no se traducen en Jinja2. Lamentablemente, las preocupaciones de compatibilidad con versiones anteriores no ven que esto cambie pronto.
Para mí, lo más molesto de usar Jinja2 en Django es que no podrás usar algunas aplicaciones de Django cuando vienen con sus propias plantillas o etiquetas de plantilla (p. Ej., Django-uni-forms).
Esto puede ser frustrante algunas veces, cuando encuentras una gran aplicación que resuelve tus problemas pero no puedes usarla porque no es compatible con Jinja2.
Por cierto, parece que Armin Ronacher (el autor de Jinja2) estará trabajando en un nuevo backend de motor de plantillas que se ubicará detrás de Jinja2 y Django, reemplazando la infraestructura actual pero conservando la compatibilidad con versiones anteriores. https://www.djangoproject.com/weblog/2011/apr/25/gsoc/
re: la falta de {% spaceless %}
en jinja2, echa un vistazo al módulo jinja2htmlcompress :
# In shell:
fetch -o myapp/jinja2htmlcompress.py https://raw.github.com/mitsuhiko/jinja2-htmlcompress/master/jinja2htmlcompress.py
# In your app:
app = Flask(__name__, static_path=''/static'')
app.config.from_object(''myapp.default_settings'')
app.jinja_env.add_extension(''myapp.jinja2htmlcompress.HTMLCompress'')
En abril de 2015, Django 1.8 admite plantillas de renderizado con varios motores dentro del mismo proyecto , y tiene soporte incorporado para Jinja2 . Entonces ya no tiene que ser una decisión de todo o nada.
(Si bien esto no está respondiendo directamente a la pregunta, ya que este era el caso anterior, pensé que merecía más que solo un comentario).
Tuve algunos problemas para obtener formularios crujientes para trabajar con Jinja2. Sin embargo, hay una manera bastante fácil de resolver esto.
formas django crujientes con jinja2
Creo que, en general, las desventajas probablemente sean similares. A menudo se usan paquetes de Django que simplemente no funcionan con Jinja2.