我目前正在开发一个项目,其中有一个存档,您应该能够从网页中的按钮删除视频。当我通过 python 实现网页时,我在将按钮名称命名为索引(在 for 循环中声明的 (idx))时遇到了麻烦。我需要在 /delete 应用程序路径中单击按钮的名称(索引)(或直接文件名),但无法弄清楚如何正确传输它。按钮本身可以工作。
@app.route('/archive' , methods=['GET', 'POST'])
def archive():
path = "/home/pi/Videos/"
print("Files and directories in '", path, "' :")
dir_list = os.listdir(path)
dir_list.sort() # The List
output = '''<!DOCTYPE html><html lang="en">... #just some styling
<div class = Box>
<div class = flex-box>'''
for idx, file in enumerate(dir_list): #For loop through each element
output += "<div style = 'background: black;'>"+ file + "</div>" + ''' <form method='post' action='myip/delete'>
<input class='btn' type='submit' name=idx value='Delete'> </form> '''
output += "</div></div>"
return output
@app.route('/delete', methods=['GET', 'POST'])
def delete_file():
output = request.form['idx']
os.remove(THEFILEIWANTTODELETE) #HERE I NEED TO HAVE THE INDEX OR FILE NAME/ROUTE
return redirect(url_for('archive'))
我已经尝试获取索引,但只获取了按钮的值。
根据您的示例,这是一个可能的解决方案。
要显示页面,正如 @roganjosh 提到的,您可以将 jinja 与
render_template
或 render_template_string
一起使用。 Jinja 是一个内置模板引擎,您可以将模板和带有数据的字典传递给它。然后可以根据其密钥在模板中以各种方式使用该数据
要指定要删除的文件,我认为最简单的方法是发送文件名。在这种情况下,使用变量规则内的路径。
from flask import (
Flask,
redirect,
render_template_string,
url_for
)
import os
app = Flask(__name__)
@app.route('/archive')
def archive():
path = '/home/pi/Videos/'
dir_list = os.listdir(path)
dir_list.sort()
return render_template_string(
'''
<!DOCTYPE html>
<html lang="en">
<!-- ... -->
<body>
<div class="box">
<div class="flex-box">
{% for file in dir_list -%}
<div>
{{ file }}
<form method="post" action="{{ url_for('.delete', filename=file) }}">
<input type="submit" value="Delete" />
</form>
</div>
{% endfor -%}
</div>
</div>
</body>
</html>
''',
**locals()
)
@app.post('/delete/<path:filename>')
def delete(filename):
path = '/home/pi/Videos/'
try:
os.remove(os.path.join(path, filename))
except: pass
return redirect(url_for('archive'))