2013-05-22 56 views
7

không tìm thấy một bài đăng trong đó có các vấn đề tương tự, tôi đang cố gắng để tạo ra một số hộp kiểm tra với bình và wtforms, tại thời điểm này tôi đã có đoạn mã này:Jinja2 Template - Vòng lặp for

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    <label class="checkbox inline"> 
     {{ form.bri1(value=1) }} {{ form.bri1.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri2(value=1) }} {{ form.bri2.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri3(value=1) }} {{ form.bri3.label }} 
    </label> 
    <label class="checkbox inline"> 
     {{ form.bri4(value=1) }} {{ form.bri4.label }} 
    </label> 
</div> 

này hoạt động cho đến nay, nhưng bây giờ tôi cố gắng làm điều này với một đơn giản cho vòng lặp như:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for n in range(1,6) %} 
    <label class="checkbox inline"> 
     {{ form.brin.label }} 
    {% endfor %} 
</div> 

tôi đã thử với(), {} và {{}} ... là này thậm chí có thể?

+0

Đây không phải là câu hỏi về Flask, vì Flask không bao gồm một công cụ mẫu. Có lẽ bạn đang hỏi về Jinja2? –

+0

Xin lỗi lỗi của tôi, bạn hoàn toàn đúng. – Kilrathy

+0

@Kilrathy Vì vậy, vấn đề là với "phạm vi"? [This] (http://stackoverflow.com/q/6036082/1205368) có giúp ích không? – Salem

Trả lời

12

Hãy thử:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for name, field in form._fields.items() %} 
     {% if name != 'csrf_token' %} 
      <label class="checkbox inline"> 
       {{ field(value=1) }} {{ field.label }} 
      </label> 
     {% endif %} 
    {% endfor %} 
</div> 

Ở đó bạn có thể thiết lập sắp xếp thay form._fields.items() hay điều kiện thay vì {% if name != 'csrf_token' %}. Hoặc:

<div class="control-group"> 
    <p><strong>Check the enabled BRI Ports</strong></p> 
    {% for n in range(1,6) %} 
     {% if form['bri' + n|string] %} 
      <label class="checkbox inline"> 
       {{ form['bri' + n|string](value=1) }} {{ form['bri' + n|string].label }} 
      </label> 
     {% endif %} 
    {% endfor %} 
</div> 

Bạn cũng có thể sử dụng n.__str__() thay vì lọc n|string.

+0

Tôi đã thử cả hai, cái thứ hai mang lại cho tôi lỗi "TypeError: không thể nối các đối tượng 'str' và 'int'". Nắm đấm một phần hoạt động, nhưng nó mang lại cho tôi tất cả các lĩnh vực ra, tôi chỉ muốn BooleanField bri1-4 ... bất kỳ ý tưởng? – Kilrathy

+1

Xin lỗi, tôi đã cập nhật ví dụ thứ hai. Đầu tiên bạn có thể thêm điều kiện riêng: '{% if name.startswith ('bri')%}'. – tbicr

+0

Xin cảm ơn rất nhiều! Điều này làm việc perfekt cho tôi! – Kilrathy

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