#javascript #html #css #django
#javascript #HTML #css #django
Вопрос:
Я пытаюсь установить высоту изображений, загруженных в мой html-файл, с помощью Django как таковой:
<img data-original={{img.url}} width='310' height=calcHeight({{img.height}}, {{img.width}})/>
Функция ‘calcHeight (h, w)’ является простой функцией для масштабирования высоты изображения пропорционально ширине 310. Я должен это сделать, потому что я использую плагин lazyloader, который должен генерировать пустые заполнители для изображений перед загрузкой самих изображений. Изображения имеют разные размеры, поэтому мне нужно получить высоту и ширину изображений до загрузки фактических изображений, в противном случае заполнители будут «без высоты» до загрузки фактических изображений, в результате чего макет будет испорчен в процессе.
Приведенный выше код не работает, и я предполагаю, что это потому, что вы не можете вызвать функцию для такой высоты. Надеюсь, я достаточно точно объяснил вопрос и заранее благодарю за любые советы!
Комментарии:
1. что «не работает»? вы получаете сообщение об ошибке?
2. Извините, высота по существу установлена на 0, что не дает заполнителям высоты при загрузке веб-страниц. Это приводит к переполнению изображений другими изображениями / текстом, когда они загружаются после прокрутки в окне просмотра.
Ответ №1:
Вы не можете вызвать функцию, которая принимает аргументы внутри шаблона с помощью Django. Чтобы добиться этого, вам нужно будет написать тег шаблона или отфильтровать его самостоятельно.
Тогда вы могли бы сделать что-то вроде:
{% my_img_tag img.url img.height img.width %}
Который будет включен в ваш конструктор тегов:
def my_img_tag(url, height, width):
new_height = calcHeight(height, width)
return {'url': url, 'height': new_height, 'width': width}
И ваш шаблон мог бы выглядеть примерно так:
<img data-original="{{url}}" width="{{width}}" height="{{height}}"/>
Комментарии:
1. Ах, так вы, по сути, вычисляете новую высоту при загрузке изображения в базу данных, вместо того, чтобы вычислять ее при загрузке веб-страницы?
2. @dutchJSCOOP Вы хотите вычислить изображение, которое появляется на веб-странице и не поступает с сервера? Шаблон Django отображается на сервере, поэтому он не знает о контексте клиента, если это так, возможно, его вычисление с помощью javascript достигнет желаемого эффекта.
3. Нет, я хочу рассчитать высоту изображения, которая поступает с сервера, поддерживаемого django.
Ответ №2:
Я решил проблему, вычислив масштабированную высоту изображения после сохранения в базе данных django как таковую:
def save(self, *args, **kwargs):
self.photo_scaledHeight = self.photo_height * (310/self.photo_width)
super(Post, self).save(*args, **kwargs)
Я добавил поле ‘photo_scaledHeight’ к модели, в которой использовалась фотография, чтобы я мог просто вызвать это в своем шаблоне следующим образом:
<img data-original={{photo.url}} width='310' height='{{photo_scaledHeight}}' />
@lucas-лазаро указал мне правильное направление