models.py class Catalog(models.Model): title = models.CharField(max_length=150) description = models.TextField() image = models.ImageField(upload_to='catalog_images') def __str__(self): return self.title views.py def description(request, catalog_id): catalog = Catalog.objects.get(id=catalog_id) desc = catalog.description page_header = 'Catalog description' context = {'desc': desc, 'catalog': catalog, 'page_header': page_header} return render(request, 'catalog/description.html', context) в шаблоне: {% if catalog.image %} <img src="{{ catalog.image.url }}" alt="111"> {% endif %} settings.py MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') в просмотре кода страницы: <img src="/media/catalog_images/640px-Breaded_Cat_1.jpg" alt="111"> по факту картинка в папке есть, но не отображает на странице в консоли пишет: [11/Apr/2017 21:08:37] "GET /catalog/1/ HTTP/1.1" 200 1029 Not Found: /media/catalog_images/640px-Breaded_Cat_1.jpg [11/Apr/2017 21:08:37] "GET /media/catalog_images/640px-Breaded_Cat_1.jpg HTTP/1.1" 404 2277 
  • Is the directory really MEDIA_ROOT ? Does the file really exist? - FeroxTL

2 answers 2

If you use a dev server as a static server, then you need to add routes to your urlconf

 from django.conf import settings from django.conf.urls.static import static # ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
  • Alas, did not help - bedon
  • Did you restart the server after making changes? - 0xdef

It works like this for me:

urls.py

 from django.views.static import serve urlpatterns = [ ... url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT, }), ... ]