Django - 模板位掩码检查

时间:2014-01-21 09:45:46

标签: python django django-templates bitmask django-template-filters

考虑这个清单:

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运营商? (或者会更简单吗?)

1 个答案:

答案 0 :(得分:0)

作为suggested by @MikkoOhtamaa,我将使用字典

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 %}