2015-06-04 28 views
1

我正在嘗試創建一個Web應用程序,它使用一個窗體(WTForms)來獲取兩個svn網址並執行某些操作/顯示它們。這將有,如果點擊就會ONLY顯示與信息的表另一起提交按鈕,做其他功能(使用show=True給render_template)試圖在render_template()(Flask)之後在另一個作用域中使用訪問變量?

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,所以我不能只記得這個函數。

我只是想不出一種方法來格式化代碼或解決方案,將解決我的問題,所以任何幫助表示讚賞。

回答

1

只有當您將prev_pdf存儲在某個可以在下一個請求中訪問的地方時,您纔有可能執行此操作。我會建議將列表本身(prev_pdf)存儲在Flask Session中或存儲svn_url1,以便您可以在第二個請求上重新生成列表。請參閱this如何使用FLask會話的示例。

您需要保存該數據的原因正如您發現的那樣,每個HTTP請求都是完全獨立的,並且與以前的請求「隔離」,因此請求之間進行通信的唯一方法是將所需的信息每次客戶端,或將這些信息保存在服務器端並在每次請求時訪問它。

相關問題