首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >姜戈。如何以编程方式重命名使用django-filer上传的文件

姜戈。如何以编程方式重命名使用django-filer上传的文件
EN

Stack Overflow用户
提问于 2013-09-24 19:43:39
回答 1查看 903关注 0票数 1

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

实际上,我需要重命名所有内容,尤其是filename,而不仅仅是Image model name。

我尝试捕获图像模型的pre_save信号并更改instance.original_filename,但这不是重命名文件名。或者也许我应该子类化并覆盖filer包中的某些内容?

我将感谢代码示例,因为这对我来说有点难。

EN

回答 1

Stack Overflow用户

发布于 2013-09-25 23:19:46

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

代码语言:javascript
复制
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)  

根据https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.FileField.upload_toprofilbild_path是一个函数:

代码语言:javascript
复制
def profilbild_path(instance, filename):
    return os.path.join('profilbilder', str(instance.id), filename)

我希望这能给你一些线索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18980700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档