我有一个用Django开发的项目,用户可以通过视图中的表单上传图像。这部分似乎工作正常,因为我可以将数据绑定到表单并将图像保存在我用于项目数据库的目录中的指定文件夹中。然而,当我去渲染页面时,我得到类似于以下行的内容(上传的图像具有文件名“2220.jpg”):
GET http://localhost:8000/Users/.../project/database/user_uploads/08-30/2220.jpg 404 (NOT FOUND)
以下是我的模板中呈现图像的行:
<img class="image" src="{{ entry.image.url }}"/>
我的settings.py的相关部分:
PROJECT_DIR = os.getcwd()
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'database', 'user_uploads')
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
包含图片的模型:
def getImagePath(instance, filename):
"""Generates a path to save the file. These are timestamped by the
current date and stored in the databases directory.
Returns:
Path for the file.
"""
date = datetime.date.today().strftime('%Y-%m-%d')
return os.path.join(
os.getcwd(), 'database', 'user_uploads', date, filename)
class Entry(models.Model):
# Other code omitted
image = models.ImageField(upload_to=getImagePath)
我猜测有一些URL配置我缺少,因为它似乎要求通过localhost(或更常见的是我的主机名)提供图像,而不仅仅是文件系统上的目录。文件位置是正确的,它似乎只是为它执行HTTP请求而不是直接获取它。我错过了什么?为了清楚起见,我很乐意提供任何其他信息。
提前谢谢!
答案 0 :(得分:0)
你必须设置媒体服务。 https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user
答案 1 :(得分:0)
除了montiniz的回答,以下帖子帮助了我:
Django MEDIA_URL and MEDIA_ROOT
基本上我缺少的是从MEDIA_ROOT提供文件的URL配置。另一件事是调用Django ImageField上的url()参数返回完全限定的URL名称 - 即文件的完整位置。从模板提供图像所需的只是它在MEDIA_ROOT中的位置。在我的例子中,此设置为'database / user_uploads',图像位于'2013-09-02 / images / 2220.jpg'。
因此我需要的网址是:
'localhost:8080/media/database/user_uploads/2013-09-02/images/2220.jpg'。
希望这可以帮助任何有同样问题的人!