Django 如何从文件路径中删除settings.MEDIA\u根目录
我有一段代码,可以在上传视频时为其创建缩略图-看起来如下所示: views.py发布方法:Django 如何从文件路径中删除settings.MEDIA\u根目录,django,python-3.x,Django,Python 3.x,我有一段代码,可以在上传视频时为其创建缩略图-看起来如下所示: views.py发布方法: if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg': thumb_title = form.instance.title.replace(" ", "") in_path = str(settings.MEDIA_ROOT) + "/" + str(form.instance.video_file) out_
if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg':
thumb_title = form.instance.title.replace(" ", "")
in_path = str(settings.MEDIA_ROOT) + "/" + str(form.instance.video_file)
out_path = str(settings.MEDIA_ROOT) + "/images/" + thumb_title + ".png"
if create_thumbnail(in_path, out_path):
form.instance.thumbnail = "images/" + thumb_title + ".png"
其中create_thumbnail
是帮助函数。。看起来是这样的:
def create_thumbnail(input_path, output_path):
"""
Save first frame of video for use as video thumbnail.
:param input_path: video input path
:param output_path: image output path
:return: Boolean
"""
cap = cv2.VideoCapture(input_path)
ret, frame = cap.read()
if ret:
return cv2.imwrite(output_path, frame)
else:
pass
我主要关心的是从每个文件路径中删除
设置.MEDIA\u ROOT
。如何避免手动键入文件路径?或者有没有一种方法可以让helper函数变成一个表单方法,并直接调用表单实例url?我想清理这段代码。根据您提供的信息,请记住,我对任何表单都一无所知,也不知道cv2有什么作用,我可以这样整理:
def create_thumbnail(video_file, title):
"""
Save first frame of video for use as video thumbnail.
:param video_file: video file from the form instance
:param title: the title of the thumbnail
:return: path to the thumbnail
"""
in_path - f'{settings.MEDIA_ROOT}/{video_file}'
out_path = f'{settings.MEDIA_ROOT}/images/{title}.png'
cap = cv2.VideoCapture(input_path)
ret, frame = cap.read()
if ret:
image = cv2.imwrite(output_path, frame)
if image:
return out_path
return ''
if form.instance.thumbnail == 'images/clearpath_logo/Logo.jpg':
thumb_title = form.instance.title.replace(" ", "")
form.instance.thumbnail = create_thumbnail(form.instance.video_file, thumb_title)
注意,您的代码根本无法处理将视频文件命名为与其他人相同的人。缩略图将被覆盖。一个简单的解决方案是给缩略图一个随机名称。为什么不更改
创建缩略图
,只获取视频文件
,然后处理create\u thumboil
中的所有逻辑,然后返回输出路径。OpenCVVideoCapture
方法采用URL。我曾尝试使用form.instance.video\u file.URL
,但这并没有给媒体提供支持。我说的是传入form.instance.video\u file
。并在函数中使用settings.MEDIA\u ROOT
作为前缀。我知道的重复文件名(在列表中是下一个)。感谢您花时间写下如此详细的回复。我希望有一种方法不必在任何地方手动编写设置.MEDIA\u ROOT
。虽然你的代码看起来好了一点,但我仍然不太满意我希望我能在哪里使用它。什么是settings.MEDIA\u ROOT
和form.instance.video\u file
?