尝试在 render_template() (Flask)之后访问另一个范围内的变量?
Trying to use a access a variable in another scope after render_template() (Flask)?
我正在尝试创建一个使用表单 (WTForms) 获取两个 svn url 并执行 something/displays 的网络应用程序。它将有一个更新按钮,如果单击该按钮,将 ONLY 显示带有信息的 table 以及具有其他功能的 另一个提交按钮 (使用 show=True
给予 render_template)
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,这在我返回 [=35= 后超出了范围] 在第一个 if
语句的末尾。我也不能再访问 form1.svn_url1.data 所以我不能只记得函数。
我只是想不出一种格式化代码的方法或解决我的问题的解决方案,因此不胜感激。
只有将 prev_pdf
存储在可以在下一个请求中访问的某个位置,您尝试做的事情才有可能实现。我建议要么将列表本身 (prev_pdf
) 存储在 Flask Session 中,要么存储 svn_url1
以便您可以在第二次请求时重新生成列表。请参阅 this 如何使用 FLask 会话的示例。
您需要保存该数据的原因正如您所发现的那样,每个 HTTP 请求都是完全自包含的,并且 "isolated" 来自以前的请求,因此请求之间进行通信的唯一方法是传递信息您每次都希望从客户端获取,或者将该信息保存在服务器端并在每次请求时访问它。
我正在尝试创建一个使用表单 (WTForms) 获取两个 svn url 并执行 something/displays 的网络应用程序。它将有一个更新按钮,如果单击该按钮,将 ONLY 显示带有信息的 table 以及具有其他功能的 另一个提交按钮 (使用 show=True
给予 render_template)
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,这在我返回 [=35= 后超出了范围] 在第一个 if
语句的末尾。我也不能再访问 form1.svn_url1.data 所以我不能只记得函数。
我只是想不出一种格式化代码的方法或解决我的问题的解决方案,因此不胜感激。
只有将 prev_pdf
存储在可以在下一个请求中访问的某个位置,您尝试做的事情才有可能实现。我建议要么将列表本身 (prev_pdf
) 存储在 Flask Session 中,要么存储 svn_url1
以便您可以在第二次请求时重新生成列表。请参阅 this 如何使用 FLask 会话的示例。
您需要保存该数据的原因正如您所发现的那样,每个 HTTP 请求都是完全自包含的,并且 "isolated" 来自以前的请求,因此请求之间进行通信的唯一方法是传递信息您每次都希望从客户端获取,或者将该信息保存在服务器端并在每次请求时访问它。