python - 这个python函数如何获取它的参数?

标签 python django amazon-s3 django-models

我正在按照本教程将 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/

相关文章:

python - 如何获取 JSON 字典列表中的特定键

Python-从当前文件夹读取文件

python - Oracle SQL 中的字符串匹配和表连接

html - 单击电子邮件中的链接时,Django allauth 密码重置不起作用,但在其他情况下起作用

python - 使用 django-polymorphic 创建许多对象

django图片上传无法导入名称_imaging

amazon-s3 - 是否可以使用 Amazon S3 为选择性用户共享文件

jquery - 如何使用jRecorder和Ruby on Rails将录制的音频文件上传到Amazon S3

java - MapReduce Apache Hadoop 技术

python - 如何在python中锁定一个方法(防止它被覆盖)?