首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人类可读的文件名

人类可读的文件名
EN

Stack Overflow用户
提问于 2015-11-25 11:23:47
回答 1查看 284关注 0票数 0

每当我使用名为ImageField的文件创建moon.png时,Django按照我的配置设置正确地将文件放入:

代码语言:javascript
复制
campaign/primary-banner/2015/11/25/moon.png

代码语言:javascript
复制
campaign/primary-banner/2015/11/25/moon_RcJ3FuD.png

这就是imagefield.name的价值,我可以向用户展示,但并不是真正的用户友好。

我想以人类可读的格式显示ImageField.name的名称。是否可以从moon.png中提取原始文件名( ImageField )?我能想到的解决办法是:

  • 在我的模型中添加一个额外的字段来保存人类可读的文件名。额外的工作,我想避免:干。
  • 处理imagefield.name值以提取原始文件名,但这似乎太复杂了(首先,我需要准确了解django是如何生成文件名的,以确保涵盖了角的情况)
EN

回答 1

Stack Overflow用户

发布于 2015-11-28 22:58:29

我也有类似的问题,并通过在MEDIA_ROOT下创建自己的子目录来解决这个问题,在这个子目录中,我创建了包含日期的目录结构以及一些唯一的标识符。然后,我将文件移至最后一个子目录,并将名称放入FileField.name。一切都像魅力一样--文件是唯一的(感谢唯一的目录),而最终的名称正是我希望用户看到的(因为没有必要重命名它--没有冲突是可能的)。

代码语言:javascript
复制
p.filename=get_filename_of_existing_file_to_be_stored()
p.originalfilename=get_how_it_should_be_named()
masterobject=MyNewMaster.objects.get(pk=some_id)
uniq_name=masterobject.make_something_unique()


new_object=MyObject()
new_object.master=masterobject
new_object.some_fields=some_values
daystr=date.today().strftime('%y-%m-%d')
directory='MyDir/%s/%s/%s/'%(daystr,masterobject.id,uniq_name)
if not os.path.exists(os.path.join(settings.MEDIA_ROOT,directory)):
    os.makedirs(os.path.join(settings.MEDIA_ROOT,directory))
fname=os.path.join(directory,p.originalfilename)
os.rename(p.filename,os.path.join(settings.MEDIA_ROOT,fname))
new_object.filename = fname
new_object.save()

现在,一切都对我有效,没有冲突是可能的,就连Django似乎也对这个黑客很满意,并为我尝试使用MyObject :)提供了正确的文件名和url。)

现在我以这样的路径结束了:

代码语言:javascript
复制
MyDir/2015-11-29/12345/child_7/moon.png
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33915245

复制
相关文章

相似问题

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