我试图创建一个使用表单(WTForms)来获取两个svn url并执行某些操作/显示它们的Web应用程序。它将有一个更新按钮,如果点击将仅显示一个包含信息的表格以及执行另一个功能的另一个提交按钮(使用给予render_template的show=True
)
views.py
:
@app.route('/test4', methods=['GET','POST'])
def test4():
form1=SVN_Path()
form2=Inputs()
if request.method=="POST":
if request.form.get('updatepaths')=='Update' and form1.validate_on_submit():
--> basepath=createDir()
svn_url1 = form1.svn_url1.data
svn_url2 = form1.svn_url2.data
--> prev_pdf=PDF_List(svn_url1,basepath,'prev') #function that generates a list
new_pdf=PDF_List(svn_url2,basepath,'new') #function that generates a list
options=[("None","None")]+[(pdf,pdf) for pdf in new_pdf]
for sub_form in form2.files:
sub_form.choices= options
sub_form.default="None"
return render_template('test4.html',form1=form1,form2=form2,show=True,numfiles=len(prev_pdf),pdflist=prev_pdf)
elif request.form.get('batchfiles')=='Submit':
#I WANT TO USE PREV_PDF AND BASEPATH IN THIS PART BUT IT IS OUT OF SCOPE
else:
return render_template('test4.html',form1=form1,form2=form2)
elif
部分:elif request.form.get('batchfiles')=='Submit':
是第二次提交,只有在点击第一次提交时才会出现
问题出现时:在代码的那部分我想使用basepath和prev_pdf,因为我在第一个if
语句的末尾返回了render_template 。此外,我无法再访问form1.svn_url1.data,因此我无法回忆起该功能。
我无法想出一种格式化代码的方法或解决我问题的解决方案,因此感谢任何帮助。
答案 0 :(得分:1)
只有将prev_pdf
存储在可在下一个请求中访问的某个位置时,才能执行您要执行的操作。我建议将列表本身(prev_pdf
)存储在Flask会话中或存储svn_url1
,以便您可以在第二个请求中重新生成列表。请参阅this如何使用FLask Sessions的示例。
您需要保存该数据的原因正如您所发现的那样,每个HTTP请求都是完全自包含的并且与先前的请求“隔离”,因此在请求之间进行通信的唯一方法是传递您想要的信息。客户端每次,或在服务器端保存该信息并使用每个请求访问它。