我正在尝试在django中生成动态文件路径。我想制作一个像这样的文件系统
hierarchy:
--user_12 --channel_14 --program 2 --image1.jpg --image2.jpg --program 1 --image1.jpg --image2.jpg --user_14 --channel_13 --program 1 --image1.jpg --image2.jpg
当用户想要上传图片时,会将图片上传到相应的程序文件夹。如果程序文件夹没有创建,则会自动创建文件夹并存储图片。
我的图片路径将如下所示:media / images / john / johnchannel / birthday / img1.jpg(其中john = user,johnchannel = channel,birthday = program,images是预先创建的文件夹,其中所有图片文件应该是存储) 我是django的新手。需要紧急帮助。
答案 0 :(得分:5)
你在找这样的东西吗?
<强> misc.py 强>
def get_upload_path(instance, filename):
""" creates unique-Path & filename for upload """
ext = filename.split('.')[-1]
filename = "%s%s.%s" % ('img', instance.pk, ext)
return os.path.join(
'images', instance.user.username, instance.channel, instance.something, filename
#images/ john/ johnchannel/ birthday/ img1.jpg
)
<强> models.py 强>
from misc import get_upload_path
class MyThing(models.Model):
user = models.ForeignKey(User)
channel = models.CharField(max_length=100) # johnchannel
something = models.CharField(max_length=100) # birthday
img = models.ImageField(upload_to=get_upload_path)
答案 1 :(得分:1)
在Django模型中使用ImageField时,您可以在upload_to
关键字参数中指定可调用对象:See the FileField docs here
因此,创建一个您指向upload_to
的函数,可以根据需要生成所有子目录。