您的当前位置:首页正文

django之对FileField字段的upload_to的设定方法

2024-10-18 来源:威能网
django之对FileField字段的upload_to的设定⽅法

⽤django开发,经常要处理⽤户上传的⽂件, ⽐如user模型⾥⾯如果⼜个⼈头像的字段 ImageField等等,⽽django在FielField字段(包括ImageField)的⽀持和扩展是做的很好的,⾸先⼀个问题,是上传的⽂件,django是放到哪⾥去了,(note: ⽂件流是不会放到数据库⾥⾯的,该字段在数据库中只存储路径),django提供了upload_to属性以下介绍upload_to的具体使⽤⽅法1.最直接的⽅式,硬编码路径

# MyProject.settings.py ⾥⾯设置MEDIA_ROOT and MEDIA_URLMEDIA_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的设定⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容