2012-08-28 4 views
7

ich gemacht habe einige kleine Makro, das ich verwende, um Textzeile und Label anzuzeigen Passing Variable:für sie zu einem Makro in 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 %} 

Das Problem ist, wenn ich jinja2 Makro aufrufen:

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

Ich kann es nicht funktionieren, wenn ich die Eingabe mit {{value_username}} als Parameter aufrufen, bekomme ich immer einen Fehler.

Kennen Sie eine Lösung, wie kann ich {{value_username}} als Parameter aufrufen.

Antwort

11

Ich glaube

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

+4

Danke, es funktioniert auch mit Filter großartig. Wenn jedoch andere Zeichenfolgen an die Variable angefügt oder vorbereitet werden (zB => "Hallo {{Wert_Benutzername | Großbuchstaben}}, Guten Morgen!"), Ist es möglich, diese Art von Zeichenfolge an Makro zu übergeben? Ich versuche zu vermeiden, dass ganze Zeichenketten eine einzige Variable sind, weil es viele vorbereitete und angehängte Kombinationen gibt. –

2

Obwohl Emmett J. Butler eine Antwort zur Verfügung gestellt hat funktionieren sollte, gibt es eine kleine nitpick mit der Bestellung von Makroparameter. Sie verwenden zur Zeit folgende Signatur:

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

Sie sollten immer die Argumente Standardwert, nachdem alle anderen erforderlichen Argumente enthält, also die Reihenfolge in diese Veränderung:

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

Nun, wenn Makros mit Variablen Aufruf als Argumente, müssen Sie nicht Ihre Variablen mit {{ }} umgeben, weil Sie bereits in der {% ... %} sind.