0

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

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

在我的 settings.py 中,我的媒体 URL/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 文件夹。谁能指出我为什么?

4

3 回答 3

2

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

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

顺便说一句,我完全不同意你的回答,你不应该在你的设置中使用绝对路径!请参阅this answer 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 文件。这都是关于静态文件位置的。

于 2012-12-25T23:56:18.550 回答
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

使用此设置,一切都会正常

于 2012-12-26T14:54:11.967 回答
-2

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

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

于 2012-12-26T05:52:09.793 回答