Подтвердить что ты не робот

Изображение по умолчанию для ImageField в Django ORM

Я использую ImageField для хранения изображений профиля на моей модели.

Как мне установить его для возврата изображения по умолчанию, если изображение не определено?

4b9b3361

Ответ 1

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

pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')

EDIT: Stupid StackOverflow не позволит мне прокомментировать ответы других людей, но этот старый фрагмент не то, что вы хотите. Я настоятельно рекомендую django-imagekit, потому что он очень легко и чисто обрабатывает тонны большого размера изображения и манипуляции.

Ответ 2

Теоретически вы также можете использовать функцию в определении модели. Но я не знаю, является ли это хорошей практикой:

class Image(model.Models):
    image = ....

    def getImage(self):
        if not self.image:
            # depending on your template
            return default_path or default_image_object

а затем внутри шаблона

   <img src="img.getImage" />

Это дает вам большую гибкость в будущем...

Я использую sorl для создания эскизов с большим успехом

Ответ 3

вы можете попробовать это в своем представлении:

{% ifequal object.image None %}
    <img src="DEFAULT_IMAGE" />
{% else %}
    display image
{% endifequal %}

Ответ 4

Вы можете указать начальное значение с параметром "по умолчанию". Если изображение уже есть, и вы хотите установить его по умолчанию (вместо его удаления), вы можете попробовать что-то вроде этого:

DEFAULT = 'img/default.jpg'

class Example(models.Model):
    image = models.ImageField(default=DEFAULT)

    def set_image_to_default(self):
        self.image.delete(save=False)  # delete old image file
        self.image = DEFAULT
        self.save()

Тогда вы можете использовать set_image_to_default() вместо image.delete(), если вы предпочитаете по умолчанию.