2010-07-09 57 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