2012-08-28 5 views
7

J'ai fait une petite macro que j'utilise pour afficher la ligne de texte et l'étiquette pour elle:Passant variable à une macro dans Jinja2

{% macro input(name, text, help_text, value="", input_type) -%} 
    <label for="id_{{name}}">{{text}}<span class="right">{{help_text}}</span></label> 
    <input id="id_{{name}}" name="{{name}}" value="{{value}}" type="{{input_type}}" /> 
{{%- endmacro %} 

Le problème est quand je l'appelle jinja2 macro:

{{input("username", "Korisničko ime:", "Pomoć", {{value_username}}, "text")} 

Je ne peux pas le faire fonctionner quand j'appelle l'entrée avec {{value_username}} comme paramètre, j'obtiens toujours une erreur.

Savez-vous une solution comment puis-je appeler {{value_username}} comme paramètre.

Répondre

11

Je crois

{{ input("username", "Korisničko ime:", "Pomoć", value_username, "text") }} 

devrait fonctionner

+4

Merci, cela fonctionne très bien même avec un filtre. Mais, s'il y a d'autres chaînes ajoutées ou préparées à la variable, (par exemple = "Bonjour {{nom_utilisateur | majuscule}}, bonjour!"), Est-il possible de passer ce type de chaîne à la macro? J'essaie d'éviter de faire des chaînes entières une seule variable, car il y a beaucoup de combinaisons préparées et ajoutées. –

2

Bien que Emmett J. Butler a fourni une réponse, il y a une petite pinailler avec l'ordre des paramètres macro. Vous utilisez actuellement la signature suivante:

input(name, text, help_text, value="", input_type) 

Vous devriez toujours mettre les arguments contenant la valeur par défaut après que tous les autres arguments nécessaires, donc changer l'ordre dans ce:

input(name, text, help_text, input_type, value="") 

Maintenant, lorsque vous appelez macros avec des variables comme arguments, vous n'avez pas besoin d'entourer vos variables avec {{ }} parce que vous êtes déjà dans le {% ... %}.

Questions connexes