Изображение Django ImageField не отображается
Я пытаюсь использовать Django 2.0. Сейчас я использую "runerver" разработки, поэтому имейте в виду, что я еще не в производстве. Я знаком с различиями между ними в отношении статических файлов.
У меня есть модель Blog Post. В администраторе я хочу иметь возможность добавлять изображение в мою модель с помощью ImageField. Я бы хотел, чтобы он был необязательным и предоставлял изображение по умолчанию, если ни один не добавлен.
Я могу загружать изображения в админ. Я не могу сделать свое изображение в своем шаблоне. Консоль показывает, что Django пытается получить мой образ, но мои настройки пока не сработали.
Здесь моя модель и соответствующая область:
from PIL import Image
class Post(models.Model):
....
thumbnail = models.ImageField(default='/img/default.png', upload_to='img', blank=True, null=True)
....
Моя модель отлично работает с ImageField. Мой просмотр работает хорошо, и я не думаю, что там есть какая-то проблема.
Вот мой urls.py
....
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views
urlpatterns = [
....
path('posts/', views.PostListView.as_view(), name='post_list'),
path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('post/random/', views.random_post, name='random_post'),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я не совсем уверен в том, как обрабатывать статические файлы и медиафайлы в моем urls.py, особенно с изменениями в Django в версии 2.0.
Здесь мои соответствующие настройки.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
....
'django.contrib.messages.context_processors.media',
....
]
},
},
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'
Я также не уверен в том, что мне вложить в мои настройки.py относительно СМИ. Мои статические файлы CSS работают нормально. У меня есть логотип в моих статических файлах, которые отображаются в моем базовом шаблоне.
Вот мой тег шаблона для ImageField:
<img class="card-image mr-3" src="{{ post.thumbnail.url }}" alt="Generic placeholder image">
Наконец, моя/статическая папка и папка my/media находятся в одном каталоге. Это как в моем каталоге приложения, так и в блоге.
Может ли кто-нибудь увидеть какие-либо ошибки в этом вопросе, или они могут делать предложения? Моя проблема - изображение по умолчанию не загружается. Изображение по умолчанию IS находится в правильном каталоге /media/img/. Предупреждение консоли говорит "Не найдено: /media/img/default.png".
Заранее спасибо. Любые предложения будут полезны.
Печатание корня носителя помогло мне решить эту проблему. Спасибо Аласдер.
Я не думаю, что была какая-то проблема с моим полем модели выше.
Код urls.py, который я использовал, напрямую связан с Django docs для Django 2.0 при обработке статических файлов https://docs.djangoproject.com/en/2.0/howto/static-files/.
Изменения, внесенные мной в настройки, были выполнены благодаря печати MEDIA_ROOT в консоли. Я изменил синтаксис и направление косой черты (blog\media). Я также удалил обработчик контекста, показанный выше, в моих параметрах TEMPLATES.
Вот что для меня работает:
models.py
thumbnail = models.ImageField(default='img/default.png', upload_to='img', blank=True, null=True)
urls.py
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'blog\media')
MEDIA_URL = '/media/'
print(MEDIA_ROOT)
Тег шаблона
<img class="card-image mr-3" src="{{ post.thumbnail.url }}" alt="Generic placeholder image">
Похожие вопросы
Посмотрите другие вопросы по меткам django image imagefield или Задайте вопрос