我用一个页面显示一个文件夹下面的所有文件, 页面上有上传和删除的方法,
上传的方法 ok, 主要就是提交之后, 使用 redirect, 这个时候新上传的文件会直接显示出来,
return redirect(url_for('show_user_file', username=session['cur_username']))
但是问题出现在删除的时候, 使用的代码依然是, return redirect(url_for('show_user_file', username=session['cur_username']))
但是这个时候文件不会减少, 就是虽然删除了, 文件还是显示在页面上.
我调试了一下, show_user_filereturn render_template('listfile.html', files=file_dict, used_space = used_space)
的参数里面, file_dict 是存储当前文件夹里面的文件的参数, 这个 file_dict 的内容是 ok 的, 也就是说这里面已经没有了那个被删除的文件, 但是页面上还有, 只有刷新一下这个删除的文件才会删除掉。
开始想在页面的里面直接用 JavaScript 删除掉这个文件, 但是也可能出现服务端删除失败的情况, 所以不想用这个方法。
请问这个问题如何解决, 删除文件后为什么 render 之后的页面没有更新?
我开始猜测是 post 之后更新页面, 但是不是修改了之后还是没有变请问是怎么回事?
删除:
@app.route('/delfile', methods=['GET', 'POST'])
def delfile():
print('in delfile')
if request.method == 'GET':
filename = re.sub("_btn$", "", request.args.get('filename'))
file_path = os.path.join(session['cur_username'], filename)
if os.path.exists(file_path):
os.remove(file_path)
return redirect(url_for('show_user_file', username=session['cur_username']))
上传
@app.route('/upload/<username>', methods=['GET', 'POST'])
def show_user_file(username):
file_path = username
if not os.path.exists(file_path):
os.makedirs(file_path)
BASE_DIR = '.'
req_path = username
# Joining the base and the requested path
abs_path = os.path.join(BASE_DIR, req_path)
# Return 404 if path doesn't exist
if not os.path.exists(abs_path):
return abort(404)
# Check if path is a file and serve
if os.path.isfile(abs_path):
return send_file(abs_path)
if request.method == 'POST':
file = request.files['file']
if file:
# filename = secure_filename(file.filename)
filename = file.filename
file.save(os.path.join(file_path, filename))
return redirect(url_for('show_user_file', username=session['cur_username']))
files = os.listdir(abs_path)
file_dict={}
for i in files:
file_dict[i] = os.path.join(abs_path, i)
used_space = get_size(abs_path)
return render_template('listfile.html', files=file_dict, used_space = used_space)
show_user_file:
# Show User Folder
@app.route('/upload/<username>', methods=['GET', 'POST'])
def show_user_file(username):
file_path = username
if not os.path.exists(file_path):
os.makedirs(file_path)
BASE_DIR = '.'
req_path = username
# Joining the base and the requested path
abs_path = os.path.join(BASE_DIR, req_path)
# Return 404 if path doesn't exist
if not os.path.exists(abs_path):
return abort(404)
# Check if path is a file and serve
if os.path.isfile(abs_path):
return send_file(abs_path)
if request.method == 'POST':
file = request.files['file']
if file:
# filename = secure_filename(file.filename)
filename = file.filename
file.save(os.path.join(file_path, filename))
return redirect(url_for('show_user_file', username=session['cur_username']))
files = os.listdir(abs_path)
file_dict={}
for i in files:
file_dict[i] = os.path.join(abs_path, i)
used_space = get_size(abs_path)
return render_template('listfile.html', files=file_dict, used_space = used_space)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.