Django: как сделать расчет внутри шаблона HTML-страницы?

Привет, я использую миниатюрный плагин, чтобы получить ширину и высоту изображения, теперь я хочу определить прописку тега img, используя полученную высоту из миниатюрного плагина, например:

<img style="padding-top: {{ img.height / 2 }}" src=""/>

Но я получил ошибку здесь, django не позволяет вычислять как это?

Ответы

Ответ 1

К сожалению, нет. Вам необходимо использовать фильтры, такие как add, который встроен:

{{ img.height|add:1 }}

div, однако, не является; вы можете реализовать его самостоятельно:

from django import template
register = template.Library()

@register.filter
def div( value, arg ):
    '''
    Divides the value; argument is the divisor.
    Returns empty string on any error.
    '''
    try:
        value = int( value )
        arg = int( arg )
        if arg: return value / arg
    except: pass
    return ''

Использование будет аналогичным, т.е.:

{{ img.height|div:2 }}

Ответ 2

Там есть пакет Python, который предоставляет основные математические параметры для шаблонов Django: https://pypi.python.org/pypi/django-mathfilters

С этим вы можете сделать это:

{% load mathfilters %}
<img style="padding-top: {{ img.height|div:2 }}" src=""/>

Ответ 3

Иногда вам просто нужно сделать это в шаблоне. Следующий DjangoSnippet отлично работает. Хотя вы можете злоупотреблять им, бывают случаи, когда он делает Life Simpler®.

ExprTag - вычисление выражения python и сохранение результата в переменной

Примечание. Не проверено в 1.3, но отлично работает с чем-либо до этого.

Ответ 4

Для CSS, как в вашем примере, вы можете использовать calc().

<img style="padding-top: calc({{ img.height }} / 2)" src=""/>