Django中图像的动态文件路径

时间:2012-08-15 16:17:30

标签: django django-media

我正在尝试在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的新手。需要紧急帮助。

2 个答案:

答案 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的函数,可以根据需要生成所有子目录。