我正在尝试创建一个web应用程序,它使用一个表单(WTForms)获取两个svn URL并执行某些操作/显示它们。它将有一个更新按钮,如果单击该按钮,它将仅显示一个包含信息的表,以及另一个执行另一个功能的提交按钮(使用给定的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\u pdf,因为我在第一个if
语句的末尾返回了render\u template,所以它超出了范围。我也不能再访问form1.svn\u url1.data了,所以我不能仅仅调用函数。你知道吗
我只是想不出一个方法来格式化代码或解决方案,将解决我的问题,所以任何帮助是感激的。你知道吗
只有将
prev_pdf
存储在下一个请求中可以访问的地方,您才有可能尝试这样做。我建议在Flask会话中存储列表本身(prev_pdf
),或者存储svn_url1
,这样您就可以在第二个请求时重新生成列表。请参阅this如何使用FLask会话的示例。你知道吗您需要保存该数据的原因是,正如您所发现的,每个HTTP请求都是完全独立的,并且与以前的请求“隔离”,因此请求之间通信的唯一方法是每次都从客户端传递您想要的信息,或者将该信息保存在服务器端,并在每次请求时访问它。你知道吗
相关问题 更多 >
编程相关推荐