I can upload the image through the admin page, but the image cannot be found when I go to the URL generated by django. (Error 404) Files are uploaded to the folder:
project_root/media/eventbanner/1/
I tried several solutions, but no one works for my situation. Django 1.10 runs locally on Ubuntu 16.04.
I get the URL:
http://localhost:8000/media/eventbanner/1/banner_image.jpg
The root folder of the media is located at:
/home/username/xxx/xxx/project_name/media
Code in HTML file:
<div class="banner-image"> <img src="{{ event.eventbanner.banner_image.url }}"/> </div>
url.py code:
from django.conf.urls import url, include from django.contrib import admin from . import views from django.conf import settings from django.conf.urls.static import static app_name = 'events' urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^details/(?P<event_id>[0-9]+)/$', views.details, name='details'), url(r'^details/(?P<event_id>[0-9]+)/addcomment/$', views.add_comment, name='add_comment'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATIC_URL = '/static/' STATICFILES_DIRS =[os.path.join(BASE_DIR, 'static'),] MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') MEDIA_URL = '/media/'
models.py
def validate_only_one_instance(obj): model = obj.__class__ if (model.objects.count() > 0 and obj.id != model.objects.get().id): raise ValidationError("Can only create 1 %s instance" % model.__name__) class EventBanner(models.Model): event = models.OneToOneField(Event, unique=True) banner_image = models.ImageField(upload_to=get_image_path, blank=True, null=True) def clean(self): validate_only_one_instance(self)