Я использую ImageField
для хранения изображений профиля на моей модели.
Как мне настроить возврат изображения по умолчанию, если изображение не определено?
Я использую ImageField
для хранения изображений профиля на моей модели.
Как мне настроить возврат изображения по умолчанию, если изображение не определено?
Я не пробовал это, но я почти уверен, что вы можете просто установить его по умолчанию в своем поле.
pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
ИЗМЕНИТЬ: глупый StackOverflow не позволяет мне комментировать ответы других людей, но этот старый фрагмент - не то, что вам нужно. Я настоятельно рекомендую django-imagekit, потому что он отлично подходит для изменения размера изображений и манипуляций. очень легко и чисто.
В models.py
image = models.ImageField(upload_to='profile_pic', default='default.jpg')
В settings.py добавьте это:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Теперь вручную добавьте изображение с именем «default» в папку мультимедиа.
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
в config / urls.py вашего проекта
- person Alexander P; 04.08.2021
Теоретически вы также можете использовать функцию в определении вашей модели. Но я не знаю, хорошая ли это практика:
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 для создания миниатюр
ImageField
с URL-адресом по умолчанию, который возвращается, если значение изображения равно None.
- person Jordan Reiter; 26.04.2011
В вашем поле изображения
field = models.ImageField(upload_to='xyz',default='default.jpg')
Примечание: путь должен быть внутри MEDIA_ROOT.
вы можете попробовать это на свой взгляд:
{% ifequal object.image None %}
<img src="DEFAULT_IMAGE" />
{% else %}
display image
{% endifequal %}
Вы можете указать начальное значение с помощью параметра default. Если изображение уже существует, и вы хотите установить его по умолчанию (вместо его удаления), вы можете попробовать что-то вроде этого:
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()
, если предпочитаете значение по умолчанию.