我有一个允许上传文件的模型,但是由于某种原因,在自定义upload_to
函数中定义的空格在文件系统(或s3)中被下划线替换了文件名和文件名。文件夹路径。
是否可以强制使用空格?
例如: 文件“ hello world.png”变成“ hello_world.png”
ps:我知道使用空格是一种不好的做法,但这不是我的选择。
代码如下:
one_file = models.FileField(
_('My label'),
null=True,
blank=True,
upload_to=one_file_name,
max_length=500,
#part for s3, using the local media doens't change anything
storage=PrivateMediaStorage(),
)
def one_file_name(instance, filename):
extension = filename.split(".")[-1]
return f'folder name/subfolder name/{filename}.{extension}'
答案 0 :(得分:1)
空格都会导致url错误,我认为这可能对您有所帮助,Django在保存时会调用get_valid_filename()对文件名进行一些更改-具体针对您的情况,空格会用下划线或您想要的任何内容替换。 You can find the full docs在这里。这是函数本身:
@keep_lazy_text
def get_valid_filename(s):
"""
Returns the given string converted to a string that can be used for a clean
filename. Specifically, leading and trailing spaces are removed; other
spaces are converted to underscores; and anything that is not a unicode
alphanumeric, dash, underscore, or dot, is removed.
>>> get_valid_filename("john's portrait in 2004.jpg")
'johns_portrait_in_2004.jpg'
"""
s = force_text(s).strip().replace(' ', '_')
return re.sub(r'(?u)[^-\w.]', '', s)