Ich bin eine Liste von Werten in Django mit jeweils einem Bit von einer beliebig langen BinaryField
. In der Vorlage möchte ich Kontrollkästchen aktivieren, die den übereinstimmenden Bits entsprechen."Bitweise und" in Django Vorlagen
{% 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 %}
selected_elements
ist die unsigned integer Darstellung der Werte, die der Benutzer (unter der Annahme, die 9
1001
ist) ausgewählt. element.value
ist eine geometrische Progression 1 2 4 8 ...
Also, die {% if selected_elements & element.value %}
innerhalb der Schleife betrachten:
1001 & 0001 = True
1001 & 0010 = False
1001 & 0100 = False
1001 & 1000 = True
... all remaining elements => False
jedoch die &
scheint Probleme zu verursachen, wenn die Seite zugegriffen wird.
kann den Rest nicht analysieren: '&' von '&' (< Klasse django.template.exceptions.TemplateSyntaxError >‘)
Gibt es eine Möglichkeit Bit-Operatoren in Django zu verwenden (1.10) Vorlagen?
Beachten Sie, dass '1001 0011'' 0001' ist, nicht 'False' – Alasdair
Dies ist eine unnötig komplizierte Art, Dinge zu tun. Da Sie bereits in der Ansicht arbeiten müssen, um Ihren geometrischen Verlauf zu erhalten, sollten Sie diese Gelegenheit stattdessen nutzen, um Ihr Bitfeld in etwas Brauchbareres, dh eine Liste ausgewählter Werte, zu zerlegen. –
Danke für die Antwort und den Vorschlag @DanielRoseman. Ich werde die Laufzeit und Auslastung in der Ansicht messen (Ihr Kommentar) v/s den benutzerdefinierten Filter (Ihre Antwort) und wählen Sie. – Jedi