0

我有一个使用 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 请求,而不是直接获取它。我错过了什么?为了清楚起见,我很乐意提供任何其他信息。

先感谢您!

4

2 回答 2

0

您必须设置媒体服务。 https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user

于 2013-09-02T03:45:36.143 回答
0

除了蒙蒂尼兹的回答之外,以下线程还帮助了我:

Django MEDIA_URL 和 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'

希望这可以帮助任何有同样问题的人!

于 2013-09-02T21:13:17.217 回答