2010-07-09 116 views

回答

8

MEDIA_ROOT是您希望文件去的目录,MEDIA_URL需要是导向同一目录路径的URL。

upload_to选项可以是该目录中的一个目录,因此upload_to =“foo”将进入MEDIA_ROOT的“foo”子目录。

或者它可以是一个函数,它将图像字段实例和提议的基本文件名,并返回您想要使用的实际文件名。所以

upload_to=get_photo_path 

和:

def get_photo_path(instance, filename): 
    if not filename: return "" 
    exts = re.search('[.]([^.]*)$',filename) 
    if exts is None: 
    ext = '' 
    else: 
    ext = '.'+exts.group(1) 
    return "newname%s" % (ext) 

会重命名文件,但保持扩展。请注意,“新名称”仍将位于MEDIA_ROOT目录中 - 您不需要返回“/ usr/whatever/something/foo/newname。”。它已经为您贴上MEDIA_ROOT。

更新:

仅供参考,这是很好的了解

<modelobject>.<imagefieldname>.field.generate_filename(<modelobject>, proposed_name) 

这是如何生成的图像将进入,从模型之外的部分路径。您需要手动预先添加MEDIA_ROOT以使其成为绝对路径。

+0

Upvoted - 请注意,它与FileField完全相同。 – cji 2010-07-09 18:23:45

+0

谢谢,这是一个非常好的解释。 – gruszczy 2010-07-09 18:50:12