簡體   English   中英

燒瓶將變量從一個函數傳遞到另一個函數

[英]flask pass variable from one function to another function

正如您所看到的代碼。 我想將變量q從函數home()傳遞到函數search()

@app.route("/",methods=['GET','POST'])
def home():
    result = Mylist.query.all()
    return render_template('index.html',result=result)
    q = request.form.get("q")

@app.route("/search.html")
def search():
        d = q
        var='%'+d+'%'
        result = Mylist.query.filter(Mylist.type.like(var)
        return render_template('search.html',result=result)

其中index.html將包含:

<form action="/search.html" method="get" autocomplete="off" class="subscribe-form">
     <div class="form-group d-flex">
         <input type="text" class="form-control" placeholder="Enter your search" name="q" id="q" value="{{q}}">
         <input type="submit" value="Search" class="submit px-3">
     </div>
 </form>

現在您將在 url 中看到/search.html?q=top現在您可以使用q=request.args.get("q")輕松傳遞這個q=top ...

@app.route("/search.html",methods=['GET'])
def search():
        q =request.args.get("q")
        d=str(q)
        var='%'+d+'%'
        myresult = Mylist.query.filter(Mylist.type.like(var)| Mylist.title.like(var)).all()

選項1:

在函數內部創建和更新的變量僅存在於該函數中。

Python 文檔...

“如果一個變量在函數體內的任何地方被賦值,它就會被假定為局部變量,除非明確聲明為全局變量。”


解決方案:
創建q作為函數之外的變量,這樣它不僅被困在函數home而且現在普遍適用於任何和所有函數。 任何函數都可以使用或更新這樣的變量。

選項 2:

或者,您可以嘗試將q作為函數參數傳遞。

在下面的示例中,您將調用函數search但添加了參數q search功能本身將引用相同的q作為稱為input的東西(或選擇您自己的名字/單詞)。

@app.route("/",methods=['GET','POST'])
def home():
    result = Mylist.query.all()
    q = request.form.get("q")
    search( q )
    return render_template('index.html',result=result)


@app.route("/search.html")
def search( input ):
    d = input
    var='%'+d+'%'
    result = Mylist.query.filter(Mylist.type.like(var)
    return render_template('search.html',result=result)

定義一個全局列表,將第一個視圖函數中的變量附加到列表中,並訪問第二個視圖函數中的最后一個索引值。

var_list = []
@app.route("/",methods=['GET','POST'])
def home():
    result = Mylist.query.all()
    return render_template('index.html',result=result)
    q = request.form.get("q")
    var_list.append(q)

@app.route("/search.html")
def search():
        d = var_list.pop()
        var='%'+d+'%'
        result = Mylist.query.filter(Mylist.type.like(var)
        return render_template('search.html',result=result)

您的 index.html 將包含

<form action="/search.html" method="get" autocomplete="off" class="subscribe-form">
     <div class="form-group d-flex">
         <input type="text" class="form-control" placeholder="Enter your search" name="q" id="q" value="{{q}}">
         <input type="submit" value="Search" class="submit px-3">
     </div>
 </form>

================================================== ================================

現在您將在 url 中看到 /search.html?q=top 現在您可以通過使用輕松地傳遞這個 q=top

q=request.args.get("q")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM