django ImageField未上传文件



所以我在过去的一个小时里一直在谷歌上搜索这个问题,但无法找到解决方案。基本上就是这样:在我的模型.py中,我有一个类有这个

class Case(models.Model):
zoomOutImage = models.ImageField('Label', upload_to="zoomOutImage")

在我的设置中。py我有我的媒体URL/ROOT设置像这样的

MEDIA_ROOT = os.path.join(os.path.abspath(''),'app/static/ds/')
MEDIA_URL = '/static/ds/'

来自Web服务器的服务应该如下:

http://127.0.0.1:8000/static/ds/zoomOutImage/actinic_granuloma_3.jpg

我已经安装了PIL(在virtualENV中(,上传时没有错误,唯一的问题是当我尝试通过管理面板上传文件时,什么都没有发生。没有错误什么都没有。开发服务器根本不会将该文件上传到zoomOutImage文件夹中。有人能告诉我为什么吗?

我猜您的文件位于根目录的子目录中,该子目录名为"zoomOutImage"。甚至在根目录中有一个类似的文件。我记得在上传到字符串中放入了一个函数调用。该函数使用os.join和实例中的文件名创建路径和文件名。从头开始,目前没有可用的示例代码。但必须能够在谷歌上搜索到这一点。

看这里https://stackoverflow.com/questions/1190697/django-filefield-with-upload-to-determined-at-runtime

顺便说一句,我完全不同意你的回答,你永远不应该在你的设置中使用绝对路径!请参阅这个答案,在django 1.4开发中使用css了解如何使用正确的设置,并参考您的项目PATH

编辑(阅读自己的答案后(

我猜你错过了第一步:

这是您的设置.py文件的路径:

SETTINGS_DIR = os.path.dirname(os.path.realpath(__file__))

这是你的项目目录的路径:(我正在使用buildout,所以称之为buildout,但它是你项目的根(:

BUILDOUT_DIR = os.path.abspath(os.path.join(SETTINGS_DIR, '..'))

从那时起,你可以定义你想要的一切:

STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'static')
STATIC_URL = '/static_media/'
MEDIA_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'media')
MEDIA_URL = '/media/'

并且在您的模板文件中参考图像,如:

<a href="{{MEDIA_URL}}{{ case.zoomOutImage }}"><img src="{{MEDIA_URL}}{{ case.zoomOutImage }}" width="100%"></a>

当你给模板的对象被称为案例时

关于你的网址问题。你应该添加这个:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'', include('staticfiles.urls')),
    )

请参阅上面关于使用css的问题的链接,这是同样的问题,但在开发过程中需要查找css文件。这一切都与静态文件位置有关。

import os
# get abspath
def rel(*x):
   return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
MEDIA_ROOT = rel('media')
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
STATIC_ROOT = '' #if only your static files are in project folder
STATICFILES_DIRS = ( rel('static'),) #if only your static files are in project folder

使用此设置,所有内容都将工作

所以我终于解决了我的问题。对于未来有此问题的任何人,请执行以下操作:

如果您试图在开发服务器上本地提供静态媒体文件,请使用media_ROOT和media_URL的绝对路径。

最新更新