Изменение src img картинки django в шаблоне на основе min-width

Я не был уверен, как задать этот вопрос. Хочу отправлять изображения правильного размера на разные экраны из моего django приложения. У меня это происходит так, что когда изображение загружается, оно сохраняется в медиа, но с несколькими размерами.

media

Итак, приведенное выше изображение отображается в моем 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. Вы можете изменить размер .

Вернуться на верх