我的模板中有两个表单:一个用于发布内容,另一个用于在服务器上激活文件删除:
<div style="margin-bottom:150px;">
<h4>Delete</h4>
<form method="post" action="/delete">
<div class="form-group">
<input type="hidden" name="delete_input"></input>
</div>
<button type="submit" class="btn btn-danger" id="btnSignUp">Delete</button>
</form>
</div>
<div style="margin-bottom:150px;">
<h4>URLs</h4>
<form method="post" action="/">
<div class="form-group">
<textarea class="form-control" rows="5" id="urls" name="url_area"></textarea>
</div>
<button type="submit" class="btn btn-primary" id="btnSignUp">Urls</button>
</form>
</div>
我的app.py
看起来像这样:
@app.route("/")
def main():
return render_template('index.html')
@app.route('/', methods=['POST'])
def parse_urls():
_urls = request.form['url_area'].split("\n")
image_list = get_images(_urls)
return render_template('index.html', images=image_list)
@app.route('/delete', methods=['POST'])
def delete_images():
file_list = [f for f in os.listdir("./static") if f.endswith(".png")]
for f in file_list:
os.remove("./static/" + f)
image_list = []
conn = sqlite3.connect('_db/database.db')
curs = conn.cursor()
sql = "DROP TABLE IF EXISTS images"
curs.execute(sql)
conn.commit()
conn.close()
return render_template('index.html', images=image_list)
两个问题:
我看到它的方式,我需要使用重定向来避免重复提交,并在调用删除后,我需要重定向到索引。
我该如何正确地做到这一点?
我知道redirect
和url_for
,但如何重定向到同一页?
答案 0 :(得分:5)
您可以将所有内容放在一个网址中,但您必须检查已提交的表单。您可以拥有不同的观看次数但不呈现内容,在提交删除表单时将所有表单放入主页只需将delete
查看功能添加到此表单操作action="{{url_for('delete_images')}}"
@app.route('/delete', methods=['POST'])
def delete_images():
if request.method == 'POST':
# do your work here
return redirect(url_for('delete_images')
答案 1 :(得分:3)
您可以通过TRUE
获取当前请求的URL:
因此,要重定向到同一页面,请使用:
request.url
答案 2 :(得分:2)
如弓箭手所述:
return redirect(request.referrer)
当您有一个单击时使用路由执行给定功能的按钮时,这很有用-您不想将用户返回到该按钮的URL-您想将用户返回到URL按钮路由所引用的位置,即用户单击按钮时所在的页面。
但是,正如Mahmoud所说:
redirect(request.url)
如果您在不使用路由或特殊URL或类似内容的页面上执行某项功能,则此方法非常理想。本质上,它只是刷新页面。
答案 3 :(得分:0)
一种方法是在表单中通过Javascript设置当前网址。像:
logN
用JS设置隐藏的输入值,比如
<form method="post" action="/delete">
<div class="form-group">
<input type="hidden" name="delete_input"></input>
</div>
<input type=hidden class=current_url value="" name=current_url>
<button type="submit" class="btn btn-danger" id="btnSignUp">Delete</button>
</form>
在服务器上,function get_current_url() {
var url=window.location.href;
return url
}
$(window).on('load',function(){
var current_url=document.getElementsByClassName('current_url')[0];
current_url.value=get_current_url();
})
到发布数据的网址
答案 4 :(得分:-1)
这对我来说很完美,在最后一行:
return redirect(request.referrer)