0

考慮這個名單:Django的 - 模板位掩碼檢查

options = [ 
    { 
     'name': 'Option 1', 
     'plan': 0b001, 
    }, 
    { 
     'name': 'Option 2', 
     'plan': 0b010, 
    }, 
    { 
     'name': 'Option 3', 
     'plan': 0b110, 
    }, 
] 

問題:我怎樣才能從模板中顯示此列表

  plan1 plan2 plan3 
Option 1    ✔ 
Option 2   ✔  
Option 3 ✔  ✔  

{% for option as options %} 
<div> 
    <div>{{ option.name }}</div> 
    <div>{{ option.plan|bitmaskcheck:0b001 }}</div> 
    <div>{{ option.plan|bitmaskcheck:0b010 }}</div> 
    <div>{{ option.plan|bitmaskcheck:0b100 }}</div> 
</div> 
{% endfor %} 

用運營商類型bitmaskcheck? (或者會有更簡單?)

+4

由於Python是非常高水平的編程語言,我不會嘗試創建位掩碼,因爲它會增加問題的複雜性而沒有任何性能優勢。相反,options.plan對象可能是一個dictoinary,你可以使用options.plan [「plan1」] = True或False。然後你可以簡單地檢查它liek {{option.plan.plan1}} –

回答

0

由於suggested by @MikkoOhtamaa,我將使用一個dictionnary

options = [ 
    { 
     'name': 'Option 1', 
     'plan': {1: True,}, 
    }, 
    { 
     'name': 'Option 2', 
     'plan': {2: True,}, 
    }, 
    { 
     'name': 'Option 3', 
     'plan': {2: True, 3: True,}, 
    }, 
] 

然後,我應該能夠使我的支票:

{% for option as options %} 
<div> 
    <div>{{ option.name }}</div> 
    <div>{% if option.plan.1 %}✔{% endif %}</div> 
    <div>{% if option.plan.2 %}✔{% endif %}</div> 
    <div>{% if option.plan.3 %}✔{% endif %}</div> 
</div> 
{% endfor %}