django ImageField没有上传文件

时间:2012-12-25 19:42:34

标签: python django model upload imagefield

所以我在过去一小时内一直在谷歌上搜索这个问题,但无法提出解决方案。基本上就是这样:在我的model.py中,我有一个具有此

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

在我的settings.py中,我的媒体网址/ ROOT设置如下

MEDIA_ROOT = os.path.join(os.path.abspath(''),'app/static/ds/')
MEDIA_URL = '/static/ds/'
来自网络服务器的

应该像这样:

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

我已经安装了PIL(在virtualENV内部)并且上传时没有错误,唯一的问题是当我尝试通过管理面板上传文件时没有任何反应。没有任何错误。该文件只是没有被开发服务器上传到zoomOutImage文件夹。谁能指出我为什么?

3 个答案:

答案 0 :(得分:2)

我猜您的文件位于根目录的子目录中,子目录名为“zoomOutImage”。或者甚至是在根目录中调用的文件。我记得在上传到字符串中放了一个函数调用。该函数使用os.join和实例中的文件名创建路径和文件名。通过头部执行此操作,现在没有可用的示例代码。但必须能够谷歌这个。

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

顺便说一下,我完全不同意你的回答,你绝不应该在你的设置中使用绝对路径!请参阅此答案use css in django 1.4 development,了解如何使用正确的设置并参考您的项目路径

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

猜猜你错过了第一步:

这是settings.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>

当给予模板的对象称为case

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

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

并查看上面关于使用css的问题的链接,这是同样的问题,但是在开发期间找到css文件。这都是关于静态文件的地方。

答案 1 :(得分:0)

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

使用此设置,一切正常

答案 2 :(得分:-1)

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

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