Open AlexandreDecan opened 8 years ago
Quelques avantages en vrac :
Quelques inconvénients :
Je connais très bien j2. La question est: est ce qu'on peut mixer les 2?
Visiblement oui, en plaçant les templates dans des répertoires spécifiques pour chaque moteur. Pourquoi souhaites-tu mixer les deux ?
Comme ça on évite une autre PR géante, on peut faire des PR avec 2/3 templates à la fois
On peut effectivement mixer les deux, en séparant les sources. Si on souhaite faire une transition en douceur, c'est une bonne approche : placer les templates Jinja2 dans un répertoire parallèle dans chaque app, et dès qu'une template est prête avec Jinja2, on peut la virer du répertoire historique "templates". Quand l'ensemble est migré, on renomme le répertoire de Jinja2 en "template" (ou pas).
Je regarde pour les filtres/tags spécifiques à Django. Je suis sûr que si ça n'existe pas en builtin, quelqu'un aura pondu une extension pour supporter ça.
On peut peut etre tester la parité jinja2/dst avec travis?
Et visiblement, ce n'est pas difficile d'utiliser certains tags/filtres built-in de DTS dans Jinja2, il faut simplement les ajouter dans l'environnement.
https://docs.djangoproject.com/en/1.9/topics/templates/#django.template.backends.jinja2.Jinja2
On pourrait, mais on risque d'avoir vite des différences notamment en terme d'espaces/retours à la ligne, et aussi je suppose qu'on va en profiter pour corriger quelques aberrations au passage :-D
Fondamentalement, la migration ne sera pas si factorisable que ça : les nombreux héritages/inclusions qu'on fait un peu partout vont nécessiter de dupliquer pas mal de templates à la fois dans DTS et dans Jinja2 pour garantir la transition. Ca ne va pas rendre les choses simples niveau organisation le temps de "tout migrer".
Je me demande si on peut encore charger "localement" des tags/filtres depuis un sous-répertoire "templatetags" d'une application. Je n'ai pas l'impression, et je ne vois rien dans la doc pour ça à première vue.
Tu as déjà utilisé Jinja2 dans un projet Django ? Je ne compte pas me précipiter vers une migration DTS -> Jinja2 sans méticuleusement m'assurer qu'on ne perdra pas en clarté/organisation au profit de quelques facilités d'écriture...
Pas avec django. Mon blog utilise jinja2 par contre
Il nous faudra au moins une implémentation des tags/filtres suivants :
Note que nous pouvons soit redéfinir ces tags from scratch, soit utiliser l'implémentation de Django.
Les filtres/tags suivants sont sans doute ré-écrivables autrement :
Je pense qu'on va attendre Django 1.10 ou 1.11, que les gens se fassent les dents sur Jinja2 au travers de la 1.9 et remontent les bugs ;-)
https://docs.djangoproject.com/fr/1.11/topics/templates/ Mais d'abord passer en 1.11 (par facilité), donc #179
J'ai fait quelques tests, ils sont visibles dans la branche "jinja2". En particulier, il y a une configuration par défaut utilisant Jinja2 quand les templates sont définies (dossier "jinja2" au lieu de "templates"). J'ai converti grossièrement les templates correspondant à la page d'accueil (sidebar, navbar, etc. inclus).
Le retour que j'en fait :
{% load X %}
de Django était bien pratique pour ne pas polluer le namespace à tout va !{% url x %}
devenant des {{ url(x) }}
, ou encore les paramètres de filtres. Ce n'est pas dramatique, mais ça va demander du temps, surtout que Jinja2 est parfois plus souple (passage de paramètres), parfois moins souple (lookup d'une fonction unaire explicite, comme dans {{ user.is_authenticated }}
qui requiert les ()
explicitement (à juste titre, mais ce sont des erreurs faciles à réaliser lors de la conversion !). Même s'il existe déjà un middleware django-jinja2
pour faciliter le passage de l'un à l'autre, je ne suis pas convaincu que ça soit une bonne idée que d'utiliser ce middlware, car grosso-modo, on ne fait que porter les features de base de Django vers Jinja2 via de gros workarounds. A terme, ce serait bien plus propre et sain de réfléchir directement en "Jinja2". Mais est-ce que l'on veut réellement y arriver ?
Bien que j'apprécie la souplesse de Jinja2 (notamment pour faire de arithmétique ou un peu de logique procédurale), est-ce que l'absence de cette souplesse est un réel problème pour Lexpage ?
Django Template System et Jinja2 partagent beaucoup de points communs, mais aussi pas mal de petites différences de syntaxe. Historiquement, Jinja2 était 10 à 20x plus rapide que Django pour le rendu des templates, mais je n'ai aucune idée si cette affirmation est encore vraie à l'heure actuelle.
Quoiqu'il en soit, Jinja2 est un moteur de rendu proposé maintenant en standard dans Django (1.9 : https://docs.djangoproject.com/en/1.9/topics/templates/).
http://jinja.pocoo.org/docs/dev/
Outre les différences syntaxiques entre les deux, et la supposée différence de performances, Jinja2 permet d'intégrer quand nécessaire un peu de logique dans les templates, des macros, etc. Il serait peut-être intéressant de peser le pour et le contre d'une migration de DTS vers Jinja2, afin d'éviter d'utiliser certains "hacks" dans les templates à cause des limitations (justifiées, cela dit) de DTS.
Qu'en penses-tu @roidelapluie ?