我正在按照本教程将 amazon S3 实现到我的 django 应用程序中: http://djangotricks.blogspot.com/2013/12/how-to-store-your-media-files-in-amazon.html
在里面,他定义了一个函数upload_avatar_to,有两个参数:
def upload_avatar_to(instance, filename):
import os
from django.utils.timezone import now
filename_base, filename_ext = os.path.splitext(filename)
return 'profiles/%s%s' % (
now().strftime("%Y%m%d%H%M%S"),
filename_ext.lower(),
)
但是,当他调用它时,他没有提供任何参数:
class Profile(models.Model):
# ...
avatar = models.ImageField(_("Avatar"), upload_to=upload_avatar_to, blank=True)
# ...
如果调用时未提供实例和文件名,该函数如何获取实例和文件名?
我想在函数调用中添加一个额外的参数,例如“文件夹名称”。我该怎么做?
最佳答案
它在 Django 文档中有明确记录,upload_to 可以是可调用的: https://docs.djangoproject.com/en/1.6/ref/models/fields/#django.db.models.FileField.upload_to
根据官方文档:
这也可以是可调用的,比如一个函数,会被调用获取上传路径,包括文件名。 这个可调用对象必须能够接受两个参数,并返回一个 Unix 风格的路径(带有正斜杠)以传递给存储系统。将传递的两个参数是:
实例
定义了 FileField 的模型实例。更具体地说,这是附加当前文件的特定实例。
在大多数情况下,这个对象还没有保存到数据库中,所以如果它使用默认的 AutoField,它的主键字段可能还没有值。
文件名
最初为文件指定的文件名。在确定最终目标路径时,可能会或可能不会考虑到这一点。
关于python - 这个python函数如何获取它的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185503/