1. 程式人生 > >django之對FileField字段的upload_to的設定

django之對FileField字段的upload_to的設定

project django 很好 pri tar os.path mar ews dia

用django開發,經常要處理用戶上傳的文件, 比如user模型裏面如果又個人頭像的字段 ImageField等等,而django在FielField字段(包括ImageField)的支持和擴展是做的很好的,首先一個問題,是上傳的文件,django是放到哪裏去了,(note: 文件流是不會放到數據庫裏面的,該字段在數據庫中只存儲路徑),django提供了upload_to屬性
以下介紹upload_to的具體使用方法

1.最直接的方式,硬編碼路徑

#  MyProject.settings.py 裏面設置MEDIA_ROOT and MEDIA_URL

MEDIA_ROOT = os.path.join(BASE_DIR, ‘upload/‘
) MEDIA_URL = ‘/upload/‘ #這個是在瀏覽器上訪問該上傳文件的url的前綴 # models.py class User(models.Model): avatar = ImageField(upload_to = ‘avatar/‘) #實際的路徑就是 MEDIA_ROOT/avatar/filename #所以可以用uoload_to來指定文件存放的前綴路徑

2.使用strftime()

如果覺得以上方式太僵硬,萬一文件重名了,那就會有各種問題了,為了避免重名,django在upload_to上內置了strftime()函數

# models.py
class User(models.Model):
    avatar = ImageField(upload_to = ‘avatar/%Y/%m/%d/‘)

這樣子的方式,%Y、%m、%d分別表示年、月、日

3.更加靈活的方式

當然,如果覺得只是避免文件路徑重名,還是不能滿足你,其實,django還允許你重寫一個upload_to函數,重定義上傳文件的路徑前綴

# models.py

#讓上傳的文件路徑動態地與user的名字有關
def upload_to(instance, fielname):
    return ‘/‘.join([MEDIA_ROOT, instance.user_name, filename])

class
User(models.Model):
avatar = ImageField(upload_to = upload_to) user_name = CharField(max_length = 250)

django之對FileField字段的upload_to的設定