Изображение шаблона Django не отображается даже с URL-адресом носителя и корнем носителя

#django #image #django-templates #django-settings

#django #изображение #django-шаблоны #django-настройки

Вопрос:

Статические изображения отображаются правильно. Файлы в папке мультимедиа не отображаются html . Я пытался настроить media_url различными способами, но тщетно. Я загрузил изображение через панель администратора django. Название продукта отображается нормально. img.url показывает /media/p2.jpg

models.py

 class Product(models.Model):
    name = CharField(("Name"),max_length=256,blank=False)
    title_img = models.ImageField(null=True, blank=True)
 

settings.py

 PROJECT_ROOT = (os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT  =   os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(PROJECT_ROOT), "media_root")
 

urls.py

 urlpatterns = [
        path('', ProductList.as_view() , name="product"),
]   static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 

template.html

 {{p.name}}
<img src="{{p.title_img.url}}">
 

имя отображается, пока изображение не отображается. В консоли я получаю

 "GET /media/p2.jpg HTTP/1.1" 404 2690
 

Ответ №1:

Я изменил некоторые настройки и смог их устранить. Вероятно, ошибка заключалась в том, что я менял project_root/products/urls.py вместо или project_root/urls.py . Общие изменения, которые я сделал:

В основном urls.py , добавил эти

 urlpatterns = [
        path('', ProductList.as_view() , name="product"),
]   static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 

Изменено settings.py

 MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
MEDIA_URL = '/media/'
 

Ответ №2:

Согласно документации: https://docs.djangoproject.com/en/3.1/howto/static-files/#serving-static-files-during-development и https://docs.djangoproject.com/en/3.1/howto/static-files/#serving-files-uploaded-by-a-user-during-development

  1. его следует использовать только для целей разработки,
  2. Настройки.Для отладки должно быть установлено значение True,
  3. это работает, только если URL-адрес является локальным

в вашем случае 1 и 3 швов в порядке, но установлен ли ваш параметр ОТЛАДКИ в True?

Согласно документации: https://docs.djangoproject.com/fr/3.1/ref/contrib/staticfiles/#runserver , вы можете запустить сервер с аргументом —insecure, чтобы вы все еще могли обслуживать статические файлы или медиафайлы с DEBUG, установленным в False.

Комментарии:

1. для отладки установлено значение true