Изменение src img картинки django в шаблоне на основе min-width
Я не был уверен, как задать этот вопрос. Хочу отправлять изображения правильного размера на разные экраны из моего django приложения. У меня это происходит так, что когда изображение загружается, оно сохраняется в медиа, но с несколькими размерами.
Итак, приведенное выше изображение отображается в моем media/uploads/pieces/{ID}/Sargent.jpg и всех других изображениях его размера. Поле imageField модели указывает на "оригинальный" файл без подчеркивания и ширины.
templates/art/piece_detail.html
<picture>
<source media="(min-width:300px)" srcset="{{ piece.image.url ??? }}">
<source media="(min-width:375px)" srcset="{{ piece.image.url ??? }}">
<source media="(min-width:786px)" srcset="{{ piece.image.url ??? }}">
<source media="(min-width:1440px)" srcset="{{ piece.image.url ??? }}">
<img src="{{ piece.image.url }}" alt="{{ piece.name }} - {{ piece.height }} x {{ piece.width }}">
</picture>
Тогда я использую тег HTML <picture>
с некоторыми исходными медиа, чтобы быть тем, как я подаю соответствующее изображение. Однако я в растерянности, как лучше сделать то, что я пытаюсь достичь. Я понимаю, что эти точки разрыва, вероятно, не совсем то, что мне нужно, но я просто пытаюсь донести свою идею.
Я думал добавить больше полей "path" в модель Piece и установить их на эти другие пути URL, но это кажется неаккуратным решением. В противном случае, я думаю, мне придется выполнять некоторые манипуляции со строками в представлении, прежде чем они попадут в шаблон...
Дополнительно, каковы сегодня стандартные точки разрыва изображения?
Заранее спасибо!
вы можете создать пользовательский фильтр
который принимает url изображения и определенную ширину и возвращает URL с подключенной шириной.
def format_img_src(img_ur, size):
"""Returns an image of specific size"""
# do your formatting here
class my_model_name(models.Model):
......
image = models.ImageField(default='default.jpg', upload_to = '')
def save(self, *args, **kwargs):
super(my_model_name, self).save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height>300 or img.width > 300:
img.thumbnail( (300,300) )
img.save(self.image.path)
Если вы используете этот save
матод, то все ваши изображения сохраняются в размере 300*300. Вы можете изменить размер .