2012-08-28 36 views
7

Tôi đã thực hiện một số vĩ mô nhỏ mà tôi đang sử dụng để hiển thị dòng văn bản và nhãn cho nó:Đi qua biến một macro trong 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 %} 

Vấn đề là khi tôi gọi jinja2 vĩ mô:

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

Tôi không thể làm cho nó hoạt động khi tôi gọi đầu vào với thông số {{value_username}}, tôi luôn gặp lỗi.

Bạn có biết giải pháp nào làm cách nào để gọi số {{value_username}} làm thông số.

Trả lời

11

Tôi tin

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

nên làm việc

+4

Cảm ơn, nó hoạt động tuyệt vời ngay cả với bộ lọc. Nhưng, nếu có các chuỗi khác nối hoặc được thêm vào biến, (ví dụ => "Xin chào {{value_username | capitalize}}, chào buổi sáng!"), Có thể chuyển loại chuỗi này thành macro không? Tôi đang cố gắng tránh làm cho toàn bộ chuỗi là một biến duy nhất, bởi vì có nhiều kết hợp được thêm vào và nối thêm. –

2

Mặc dù Emmett J. Butler đã cung cấp một câu trả lời, có một nitpick nhỏ với thứ tự các thông số vĩ mô. Bạn hiện đang sử dụng chữ ký sau đây:

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

Bạn luôn nên đặt các đối số có chứa giá trị mặc định sau khi tất cả các đối số cần thiết khác, do đó thay đổi thứ tự vào này:

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

Bây giờ khi gọi macro với các biến số như đối số, bạn không cần phải bao quanh các biến của mình với {{ }} vì bạn đã nằm trong số {% ... %}.

Các vấn đề liên quan