Flask - Return 提交的相同表单
Flask - Return the Same Form that was Submitted
在 he/she 提交页面上的表单后,如何让 Flask 使 return 用户以相同的方式填写相同的页面? 'render_template' 似乎只有在我提前知道所有变量的情况下才有效。我的表单是动态的,变量会根据用户所做的选择而变化。请参阅下面的伪代码了解我的想法。我知道 render_template 不是这样工作的,但是有没有办法只说 "use the same form values that came in when rendering the template?"
@app.route('./MyPage', methods=['GET', 'POST'])
def MyPage():
if request.method == 'POST':
# Do some stuff
# return render_template('MyPage.html', context=request.form)
else:
# Do some other stuff
最简单的下载方式是按照您要求的方式在您的表单上使用 target="_blank"
:
<form action="/MyPage" method="POST" target="_blank">
<ul>
{% for input in form %}
<li>{{ input.label }} {{ input }}</li>
{% endfor %}
</ul>
</form>
那么您的 POST
处理方法除了 return CSV 之外不需要做任何其他事情:
@app.route('/MyPage', methods=['GET', 'POST'])
def MyPage():
if request.method == 'POST':
# Turn `request.form` into a CSV
# see for an example
headers = {'Content-Disposition': 'attachment; filename=saved-form.csv', 'Content-Type': 'text/csv'}
return form_as_csv, headers
else:
# Do some other stuff
如果您需要在表单上设置多个按钮,则无需在表单上设置 target
,您只需在触发 CSV 的按钮上设置 formtarget="_blank"
:
<form action="/MyPage" method="POST">
<ul><!-- ... snip ... --></ul>
<button name="submit_action" value="SAVE_AS_CSV" formtarget="_blank">Save as CSV</button>
<button name="submit_action" value="RUN_CALCULATION">Run Calculation</button>
</form>
然后您只需在 if request.method == 'POST'
块中添加 request.form['submit_action']
的检查即可开始比赛:
if request.method == 'POST':
if request.form['submit_action'] == 'SAVE_AS_CSV':
# Return the CSV response
else:
# Return the calculation response
另请参阅:Writing a CSV from Flask framework
在 he/she 提交页面上的表单后,如何让 Flask 使 return 用户以相同的方式填写相同的页面? 'render_template' 似乎只有在我提前知道所有变量的情况下才有效。我的表单是动态的,变量会根据用户所做的选择而变化。请参阅下面的伪代码了解我的想法。我知道 render_template 不是这样工作的,但是有没有办法只说 "use the same form values that came in when rendering the template?"
@app.route('./MyPage', methods=['GET', 'POST'])
def MyPage():
if request.method == 'POST':
# Do some stuff
# return render_template('MyPage.html', context=request.form)
else:
# Do some other stuff
最简单的下载方式是按照您要求的方式在您的表单上使用 target="_blank"
:
<form action="/MyPage" method="POST" target="_blank">
<ul>
{% for input in form %}
<li>{{ input.label }} {{ input }}</li>
{% endfor %}
</ul>
</form>
那么您的 POST
处理方法除了 return CSV 之外不需要做任何其他事情:
@app.route('/MyPage', methods=['GET', 'POST'])
def MyPage():
if request.method == 'POST':
# Turn `request.form` into a CSV
# see for an example
headers = {'Content-Disposition': 'attachment; filename=saved-form.csv', 'Content-Type': 'text/csv'}
return form_as_csv, headers
else:
# Do some other stuff
如果您需要在表单上设置多个按钮,则无需在表单上设置 target
,您只需在触发 CSV 的按钮上设置 formtarget="_blank"
:
<form action="/MyPage" method="POST">
<ul><!-- ... snip ... --></ul>
<button name="submit_action" value="SAVE_AS_CSV" formtarget="_blank">Save as CSV</button>
<button name="submit_action" value="RUN_CALCULATION">Run Calculation</button>
</form>
然后您只需在 if request.method == 'POST'
块中添加 request.form['submit_action']
的检查即可开始比赛:
if request.method == 'POST':
if request.form['submit_action'] == 'SAVE_AS_CSV':
# Return the CSV response
else:
# Return the calculation response
另请参阅:Writing a CSV from Flask framework