1

Using django 1.8 I have

# model.py
def signatures_path(instance, filename):
    return '{}/signatures/{}/{}'\
        .format(settings.MEDIA_ROOT, instance.id, filename)


class Des(models.Model):
    user = models.OneToOneField(User)
    signature = models.ImageField(upload_to=signatures_path,\
        blank=True, null=True, default=None)


# settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

# urls.py : I've included this pattern
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),

The admin page produces this link: http://192.168.155.44:8000/home/max/myapp/myapp/media/signatures/1/sig.png which does not work but I can view the image at http://192.168.155.44:8000/media/signatures/1/sig.png

How can I fix it properly?

M.javid
  • 6,387
  • 3
  • 41
  • 56
max
  • 9,708
  • 15
  • 89
  • 144

1 Answers1

1

You don't need to specify absolute path:

def signatures_path(instance, filename):
    return 'signatures/{}/{}'.format(instance.id, filename)

Django will use MEDIA_ROOT by default.

Also you don't need a separate url to serve media files, django dev server knows how to handle those. On production server though, say if you'll be using apache, you will have to configure apache to serve media and static files.

lehins
  • 9,642
  • 2
  • 35
  • 49