Как использовать django forloop.counter0 в математическом выражении в шаблоне? - PullRequest
0 голосов
/ 24 июня 2018

Я хочу использовать встроенный шаблонный тег django forloop.counter0 в математическом выражении.Вот что я придумал:

{% for category in categories %}
        <li class="wow fadeInUp" data-wow-delay="{{ forloop.counter0 * 0.1 }}s">
                //whatever
        </li>
{% endfor %}

Что я узнаю, что это неправильно, причина этой ошибки:

Не удалось разобрать остаток: '* 0.1' from 'forloop.counter0 * 0.1 '

В любом случае решить эту проблему?

Разве я не мог бы использовать встроенную функцию в математическом выражении?

1 Ответ

0 голосов
/ 25 июня 2018

Для этого можно использовать тег widthratio, также вы можете использовать пользовательский templatetag, как указано в комментарии Маурисио, но в widthratio конечное значение должно быть число и не может быть float , так что это может быть проблемой.

Таким образом, существует третий способ достижения этого с помощью template-filters

Так что для умножения вы можете поместить это в свой templatetags

from django import template
register = template.Library()

@register.filter(is_safe=False)
def multiply(value, arg):
    """Multiply the arg to the value."""
    try:
        return float(value) * float(arg)
    except (ValueError, TypeError):
        try:
            return value * arg
        except Exception:
            return ''

и используйте это в шаблоне как

{{ forloop.counter0|multiply:'0.1' }}

{{ '0.002'|multiply:'0.21' }}  # Output : 0.00042

Здесь value и arg не обязательно должны быть int, это также может быть float, также нет необходимости загружать какие-либо теги для умножения в шаблонах.

...