Django模板中的"Bitwise和"

Jed*_*edi 2 django django-templates

我在Django中使用任意长度的一个位来表示值列表BinaryField.在模板中,我想启用与匹配位对应的复选框.

  {% for element in elements %}
  <li class="list-group-item 
      {% if selected_elements & element.value %} 
          list-group-item-primary active 
      {% endif %}" id="{{ element.value }}">
   {{ element.description }}
  </li>
  {% endfor %}
Run Code Online (Sandbox Code Playgroud)

selected_elements是用户选择的值的无符号整数表示(假设9是哪个1001).element.value是一个几何级数1 2 4 8 ...

所以,考虑{% if selected_elements & element.value %}内循环:

1001 & 0001 = True
1001 & 0010 = False
1001 & 0100 = False
1001 & 1000 = True
... all remaining elements => False
Run Code Online (Sandbox Code Playgroud)

但是,&访问页面时似乎会造成麻烦.

无法解析余数:'&'来自'&'(<class django.template.exceptions.TemplateSyntaxError'>)

有没有办法在Django(1.10)模板中使用按位运算符?

Ala*_*air 6

Django模板语言不支持按位运算,但您可以编写自定义过滤器:

@register.filter
def bitwise_and(value, arg):
    return bool(value & arg)
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中:

{% load bitwise_tags %}
{% if selected_elements|bitwise_and:element.value %}
Run Code Online (Sandbox Code Playgroud)