Django的。如何以编程方式重命名使用django-filer上载的文件

时间:2013-09-24 11:43:39

标签: python django django-filer

假设我选择使用django-filer上传10个文件。他们最初的名字很随意。我希望有一套规则,根据这些规则,它们应该被重命名,然后才能进行进一步处理(缩略图等)。

我需要实际重命名所有内容,尤其是文件名,而不仅仅是图像模型名称。

我尝试捕获Image模型的pre_save信号并更改instance.original_filename但不重命名文件名。或者我应该从filer包中继承和覆盖一些东西?

我很感激代码示例,因为这对我来说有点难过。

1 个答案:

答案 0 :(得分:1)

我在views.py中使用form_valid(self, form)来处理和操作我的图片。完整的代码有点长且非常具体,但我会发布一些snipplet,它们应该显示如何生成文件名的想法:

def form_valid(self, form):
    upload = self.request.FILES['profilbild_original'] #coming from a very simple form
    self.request.user.student.profilbild_original = upload
    self.request.user.student.save()
    #no renaming was required here, but now I did some work:

    inputfilepath = os.path.join(my_app.settings.MEDIA_ROOT, profilbild_path(self.request.user, str(upload)))
    original = Image.open(inputfilepath) 
    original.thumbnail((200,200), Image.ANTIALIAS)
    filename = str(upload)+'.thumbnail_200_200_aa.jpg'
    filepath = profilbild_path(self.request.user, filename)
    filepath = os.path.join(my_app.settings.MEDIA_ROOT, filepath)
    original.save(filepath, 'JPEG', quality=90)
    self.request.user.student.profilbild = profilbild_path(self.request.user, filename).replace("\\", "/")
    self.request.user.student.save()

    return super(ProfilbildView, self).form_valid(form)  

profilbild_path是根据https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.FileField.upload_to的函数:

def profilbild_path(instance, filename):
    return os.path.join('profilbilder', str(instance.id), filename)

我希望这能为你提供一些线索。