2012-08-28 24 views
7

me han hecho alguna pequeña macro que estoy usando para mostrar la línea de texto y una etiqueta para que:variable de pasar a una macro en 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 %} 

El problema es cuando llamo Jinja2 macro:

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

No consigo que funcione cuando invoco la entrada con {{value_username}} como parámetro, siempre aparece un error.

¿Conoces alguna solución? ¿Cómo puedo llamar al {{value_username}} como parámetro?

Respuesta

11

creo

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

debería funcionar

+4

Gracias, funciona muy bien incluso con filtro. Pero, si hay otras cadenas anexadas o preparadas para la variable (por ejemplo => "Hola {{valor_nombredeusuario | capitalizar}}, ¡buenos días!"), ¿Es posible pasar este tipo de cadena a macro? Estoy tratando de evitar que las cadenas enteras sean una sola variable, porque hay muchas combinaciones preparadas y agregadas. –

2

Aunque Emmett J. Butler ha proporcionado una respuesta, hay una pequeña nitpick con el orden de los parámetros de la macro. Actualmente se utiliza después de la firma:

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

Siempre debe poner los argumentos que contienen valor predeterminado después de que todos los demás argumentos necesarios, por lo tanto, cambiar el orden en esto:

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

Ahora cuando se llama a las macros con variables como argumentos, no necesita rodear sus variables con {{ }} porque ya está dentro del {% ... %}.

Cuestiones relacionadas