在一個 models 中使用 FileField 或 ImageField 需要以下步驟:
1. 在你的 settings 檔案中, 定義一個完整路徑給MEDIA_ROOT 以便讓 Django在此處儲存上傳檔案. (出於效能考慮,這些檔案並不儲存到資料庫.) 定義MEDIA_URL 作為該目錄的公用 URL. 要確保該目錄對 WEB 伺服器使用者帳號是可寫的.
2. 在你的 models.py 中添加 FileField 或 ImageField, 並確保定義了upload_to 選項,以告訴 Django 使用MEDIA_ROOT 的哪個子目錄儲存上傳檔案.
3. 你的資料庫中要儲存的只是檔案的路徑(相對於 MEDIA_ROOT). 要想得到這個檔案的路徑可以用.url方法。例如,如果models裡有一個取名為"photo"的ImageField,可以在Html模板裡通過{{object.photo.url}}得到該圖片的路徑。
settings.py 設定
媒體檔案的絕對路徑:
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = 'D:/Python26/Lib/site-packages/django/bin/newproj/media'
媒體檔案的相對路徑:
# URL that handles the media served from MEDIA_ROOT.
# Example: "http://media.lawrence.com"
MEDIA_URL = '/site_media/'
設定靜態檔案路徑
STATIC_PATH = 'D:/Python26/Lib/site-packages/django/bin/newproj/media'
urls.py 影射路徑
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),
將 MEDIA_URL 的site_media 影射到 settings.STATIC_PATH
models.py 上傳圖片欄位設定
photo = models.ImageField('上傳圖片',upload_to='photos')
相當於傳到 D:/Python26/Lib/site-packages/django/bin/newproj/media/photos 目錄下,瀏覽時通過/site_media/photos/ 訪問。