在render_template()(Flask)之后尝试在另一个作用域中使用access变量?

2024-05-16 03:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个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了,所以我不能仅仅调用函数。你知道吗

我只是想不出一个方法来格式化代码或解决方案,将解决我的问题,所以任何帮助是感激的。你知道吗


Tags: formdatagetifpdfrequestsvn按钮
1条回答
网友
1楼 · 发布于 2024-05-16 03:24:43

只有将prev_pdf存储在下一个请求中可以访问的地方,您才有可能尝试这样做。我建议在Flask会话中存储列表本身(prev_pdf),或者存储svn_url1,这样您就可以在第二个请求时重新生成列表。请参阅this如何使用FLask会话的示例。你知道吗

您需要保存该数据的原因是,正如您所发现的,每个HTTP请求都是完全独立的,并且与以前的请求“隔离”,因此请求之间通信的唯一方法是每次都从客户端传递您想要的信息,或者将该信息保存在服务器端,并在每次请求时访问它。你知道吗

相关问题 更多 >