#python #html #django
#python #HTML #django
Вопрос:
Привет, я использую плагин для создания эскизов, чтобы получить ширину и высоту изображения, теперь я хочу определить заполнение тега img, используя полученную высоту из плагина для создания эскизов, например:
<img style="padding-top: {{ img.height / 2 }}" src=""/>
Но здесь я получил ошибку, django не позволяет вычислять подобным образом?
Комментарии:
1. не могли бы вы, пожалуйста, помочь мне с моим вопросом о подсчете, который я опубликовал?
Ответ №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 }}
Комментарии:
1. могу ли я использовать встроенный фильтр divide и minus?
2. Существуют ли такие фильтры? Документация ( docs.djangoproject.com/en/1.3/ref/templates/builtins ) не перечисляет их, по этой причине я рекомендовал написать свой собственный.
3. Такого рода вещи не будут добавлены к встроенным фильтрам: code.djangoproject.com/ticket/361
4. Я действительно ненавижу инструкции try / except: pass. Я думаю, это зависит от ваших данных, которые передаются в div, но я чувствую, что лучше иметь исключение, чтобы, если инженер допустит ошибку, вы, по крайней мере, знали об этом, а не получали возвращаемое значение »
5. И нельзя ли его также округлить. Например
7/3
?
Ответ №2:
Существует пакет Python, который предоставляет базовую математику для шаблонов Django: https://pypi.python.org/pypi/django-mathfilters
С помощью этого вы можете это сделать:
{% load mathfilters %}
<img style="padding-top: {{ img.height|div:2 }}" src=""/>
Ответ №3:
Для CSS, как в вашем примере, вы могли бы использовать calc().
<img style="padding-top: calc({{ img.height }} / 2)" src=""/>
Ответ №4:
Иногда вам просто приходится делать это в шаблоне. Следующий DjangoSnippet отлично работает. Хотя вы можете злоупотреблять этим, бывают случаи, когда это упрощает жизнь®.
ExprTag — вычисление выражения python и сохранение результата в переменной
Примечание: Не тестировался в версии 1.3, но отлично работает со всем, что было до этого.
Комментарии:
1. Отлично работает с Django 1.8, но мне пришлось настроить выражения исключений, чтобы привести их в соответствие с Python3.
2. @Bobble: можете поделиться различиями? Если вы просто хотите отправить их мне по электронной почте, мой адрес электронной почты находится в моем сетевом профиле . Спасибо.