2010-06-27 9 views
6

J'utilise jinja2 pour mon moteur de template en python.concat plusieurs blocs dans jinja2?

Je voudrais joindre le contenu de plusieurs blocs et je voudrais le rendre à la fin du modèle, juste avant le tag. {ils sont divers extraits de JavaScript dans le code dans plusieurs modèles que je voudrais passer à la fin du fichier, comment puis-je le faire? }

modifier:

Je voudrais passer tout mon javascript en ligne qui sont créés dans les modèles de Jinja des enfants. Je voudrais les déplacer au bas de la page. J'ai donc créé un bloc dans le template parent à la fin de la page et je l'ai utilisé dans un template enfant pour écrire javascript. mais, il peut y avoir plusieurs enfants, et ainsi de multiples blocs javascript, et comme plusieurs blocs ne sont pas pris en charge dans jinja2, quelle est l'autre solution que j'ai? -------- une alternative je pense est de créer javascript lui-même de telle sorte qu'il n'a pas besoin d'être en ligne.

+0

pourrait-il expliquer un peu plus en détail ce que vous essayez de faire? –

Répondre

15

Je suppose que par plusieurs enfants, vous voulez dire qu'il y a des modèles héritant de modèles héritant de modèles ... héritant du modèle de base. Si c'est le cas, vous devez définir le même bloc javascript dans chaque modèle et appeler le super() dans tous les enfants, en plus d'ajouter plus de JavaScript. L'appel super() imprime la sortie du bloc javascript du parent, et ainsi de suite jusqu'à la chaîne d'héritage. En cours de route, chaque bloc peut ajouter son propre code.

Donc, vous pourriez avoir quelque chose comme ceci dans chaque modèle:

{% block javascript %} 
    {{ super() }} 

    function foo(x, y) { 
     return x + y; 
    } 
{% endblock %}