更正 ImageField link

Correcting ImageField link

我使用的是 django 1.8

# 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}),

管理页面生成此 link: http://192.168.155.44:8000/home/max/myapp/myapp/media/signatures/1/sig.png 这不起作用,但我可以在以下位置查看图像 http://192.168.155.44:8000/media/signatures/1/sig.png

如何正确修复它?

您不需要指定绝对路径:

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

Django 默认使用 MEDIA_ROOT

此外,您不需要单独的 url 来提供媒体文件,django 开发服务器知道如何处理这些文件。但是在生产服务器上,假设您要使用 apache,则必须配置 apache 以提供媒体和静态文件。