Как добавить картинки в шаблон и админку Django приложения.
Наконец то разобрался, как выводить изображения в шаблон сайта и выводить в админку миниатюру картинки.
После нескольких дней танцев с бубном было найдено решение проблемы.
В этой статье я расскажу, как я добавлял в модель поле imagefield и настраивал его. Возможно это кому то в дальнейшем поможет.
Добавляем в вашу модель поле imagefield
image = models.ImageField(blank=True, upload_to='images/blog/%Y/%m/%d', help_text='150x150px', verbose_name='Ссылка картинки')
В settings.py настраиваем пути.
MEDIA_URL = '/static/media/'
STATIC_ROOT = 'D:/OpenServer/domains/mysite/static/'
MEDIA_ROOT = 'D:/OpenServer/domains/mysite/static/media/'
В моем случае я решил, что картинки будут находится в каталоге /static/media/. Как видим в моей модели я указал для приложения Блог каталог /blog/ таким образом все картинки для блога будут собираться в этом каталоге и он будет иметь такой путь /static/media/images/blog/год/месяц/день/ и вид как на картинке
Думаю понятно, куда лягла картинка python.png. Для меня это очень удобно такое расположение картинок - типа фильтра.
Далее идем в свой шаблон и выводим картинку таким образом. Тут вы подставляете свою переменну у меня это - te, вы ставите свою, которую указали в views.py для передачи в контекст шаблона своего приложения!
{% if te.image %}
<img src="{{ MEDIA_URL }}{{ te.image }}">
{% endif %}
Если не заработало, то попробуйте добавить url
{% if te.image %}
<img src="{{ MEDIA_URL }}{{ te.image.url }}">
{% endif %}
Все, теперь у вас должны отображаться картинки на сайте!
Давайте теперь попробуем вывести миниатюры картинок в админку сайта, чтобы было видно к какой новости добавлена картинка.
В наш файл models.py добавляем этот код.
def image_img(self):
if self.image:
return u'<a href="{0}" target="_blank"><img src="{0}" width="100"/></a>'.format(self.image.url)
else:
return '(Нет изображения)'
image_img.short_description = 'Картинка'
image_img.allow_tags = True
В этом коде вы ставите свою переменну (название вашего поля imagefield) в моем случае это - image.
В Django 2 нужно импортировать функцию mark_safe() и обернуть в нее эту строку
return mark_safe(u'<a href="{0}" target="_blank"><img src="{0}" width="100"/></a>'.format(self.images.url)) иначе вместо картинки будет выведен html код картинки!
# Вывод картинок в админке!
def image_img(self):
if self.images:
from django.utils.safestring import mark_safe
return mark_safe(u'<a href="{0}" target="_blank"><img src="{0}" width="100"/></a>'.format(self.images.url))
else:
return '(Нет изображения)'
image_img.short_description = 'Картинка'
image_img.allow_tags = True
Открываем файл admin.py и выводим в нем image и image_img. Я сделал это так.
list_display = ['title', 'category', 'likes', 'dislikes', 'slug', 'image', 'image_img', 'timestamp', 'autor']
readonly_fields = ['image_img',]
fields = ['category', 'title', 'slug', 'metakey', 'metadesc', 'text_redactor', 'text_redactor_full', 'tag', 'timestamp', 'autor', 'image', 'image_img', 'body', 'likes', 'dislikes']
Теперь у вас должны отображаться миниатюры картинок в админке! У меня это выглядит примерно так.
Видео:
Ваши комментарии
Комментарии могут оставлять только зарегистрированые пользователи!