每当我使用名为ImageField的文件创建moon.png时,Django按照我的配置设置正确地将文件放入:
campaign/primary-banner/2015/11/25/moon.png或
campaign/primary-banner/2015/11/25/moon_RcJ3FuD.png这就是imagefield.name的价值,我可以向用户展示,但并不是真正的用户友好。
我想以人类可读的格式显示ImageField.name的名称。是否可以从moon.png中提取原始文件名( ImageField )?我能想到的解决办法是:
imagefield.name值以提取原始文件名,但这似乎太复杂了(首先,我需要准确了解django是如何生成文件名的,以确保涵盖了角的情况)发布于 2015-11-28 22:58:29
我也有类似的问题,并通过在MEDIA_ROOT下创建自己的子目录来解决这个问题,在这个子目录中,我创建了包含日期的目录结构以及一些唯一的标识符。然后,我将文件移至最后一个子目录,并将名称放入FileField.name。一切都像魅力一样--文件是唯一的(感谢唯一的目录),而最终的名称正是我希望用户看到的(因为没有必要重命名它--没有冲突是可能的)。
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。)
现在我以这样的路径结束了:
MyDir/2015-11-29/12345/child_7/moon.pnghttps://stackoverflow.com/questions/33915245
复制相似问题