1.最直接的方式,硬編碼路徑
# ?MyProject.settings.py 里面設(shè)置MEDIA_ROOT and MEDIA_URL
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/' #這個(gè)是在瀏覽器上訪問(wèn)該上傳文件的url的前綴
# models.py
class User(models.Model):
????????????avatar = ImageField(upload_to = 'avatar/')
#實(shí)際的路徑就是 MEDIA_ROOT/avatar/filename
#所以可以用uoload_to來(lái)指定文件存放的前綴路徑
2.使用strftime()
如果覺(jué)得以上方式太僵硬痕支,萬(wàn)一文件重名了粹污,那就會(huì)有各種問(wèn)題了,為了避免重名,django在upload_to上內(nèi)置了strftime()函數(shù)
# models.py
class User(models.Model):
? ? ? ? avatar = ImageField(upload_to = 'avatar/%Y/%m/%d/')
3.更加靈活的方式
當(dāng)然,如果覺(jué)得只是避免文件路徑重名,還是不能滿足你割去,其實(shí),django還允許你重寫(xiě)一個(gè)upload_to函數(shù)昼丑,重定義上傳文件的路徑前綴
# models.py
#讓上傳的文件路徑動(dòng)態(tài)地與user的名字有關(guān)
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)