шаблон django forloop.counter несколько операций - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь выполнить несколько математических операций над forloop.counter в моем шаблоне Django.В частности, я пытаюсь идентифицировать каждый 29-й экземпляр, после 24-го;Итак, 24-й, 53-й, 82-й, 111-й, 140-й экземпляры и т. д. *

Я безуспешно пробовал следующее:

{% if forloop.counter == 24 or widthratio forloop.counter|add:"-24" 29 1 %}
{% if forloop.counter == 24 or forloop.counter|add:"-24"|divisibleby:29 %}

Есть ли у кого-нибудь какие-либо предложения, которые могут помочь мне достичьмоя цель?Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Другой интересный вариант, кроме Виллема, - сначала написать фильтр по модулю:

@register.filter
def modulo(num, val):
    return num % val

А затем в вашем шаблоне использовать фильтр:

{% if forloop.counter|modulo:29 0 %}

Однако в целом вы можетеи должны делать такие операции по вашему мнению, а не по вашему шаблону.Непонятно, почему вы так поступаете, поэтому у вас могут быть свои причины, но постарайтесь избежать этого, если сможете.

0 голосов
/ 21 сентября 2018

Вы можете написать это так:

{% for element in collection %}
  {% if forloop.counter|add:"-24"|divisibleby:"29" %}
    ...
  {% endif %}
{% endfor %}

, учитывая, что смещение (здесь 24) меньше периода (здесь 29), это будет работать, в противном случае нам понадобится дополнительное условие (например, с 31 и 29):

{% for element in collection %}
  {% if forloop.counter >= 31 forloop.counter|add:"-31"|divisibleby:"29" %}
    ...
  {% endif %}
{% endfor %}

Например:

>>> tp = '{% for element in collection %}{% if forloop.counter|add:"-24"|divisibleby:"29"%}A{% else %}B{% endif %}{% endfor %}'
>>> Template(tp).render(Context({'collection': range(100)}))
'BBBBBBBBBBBBBBBBBBBBBBBABBBBBBBBBBBBBBBBBBBBBBBBBBBBABBBBBBBBBBBBBBBBBBBBBBBBBBBBABBBBBBBBBBBBBBBBBB'

, как вы можете видеть, для итераций, где выполняется условие, A

Но если вам нужно написать сложную логику, в общем, вам следует пересмотреть дизайн и посмотреть, не можете ли вы вместо этого «переместить логику» в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...