Django自定义图片和文件上传路径(upload_to)的2种方式

Django提供了两种方式来自定义图片和文件的上传路径(upload_to):

1. 使用函数来自定义上传路径:

在模型字段的upload_to参数中,可以传递一个函数作为参数。这个函数会被调用来生成存储路径,并且它接收两个参数:一个是实例model实例,另一个是上传的文件名。函数的返回值即为存储路径。

例如:

“`python

def upload_to(instance, filename):

return f”uploads/{instance.user.username}/{filename}”

class MyModel(models.Model):

user = models.ForeignKey(User, on_delete=models.CASCADE)

file = models.FileField(upload_to=upload_to)

“`

在这个例子中,使用了一个upload_to函数来生成存储路径。根据用户名称和上传的文件名,生成形如`uploads/username/filename`的路径。

2. 使用字符串模板来自定义上传路径:

另一种方式是在upload_to参数中使用字符串模板,Django提供了一些内置的变量可以在字符串中使用,来自定义存储路径。

例如:

“`python

class MyModel(models.Model):

user = models.ForeignKey(User, on_delete=models.CASCADE)

file = models.FileField(upload_to=”uploads/%Y/%m/%d/”)

“`

在这个例子中,`%Y`代表年份,`%m`代表月份,`%d`代表日期。这样的话,上传的文件将会被存储在形如`uploads/年份/月份/日期/`的路径下,可以根据需求自行调整。

使用这两种方式,可以灵活地定义图片和文件的上传路径,以满足具体的需求。

# 回答此问题

后才能回答