flask将变量从一个函数传递到另一函数

时间:2019-05-11 08:42:37

标签: python function flash-message

您可以看到代码。 我想将变量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)

4 个答案:

答案 0 :(得分:1)

选项1:

在函数内部创建和更新的变量仅适用于该函数。

Python documentation ...

  

”“如果在函数体内任何位置为变量分配了值,   除非明确声明为全局,否则假定为本地。”


解决方案:
q创建为变量函数外部的变量,这样,它不仅会陷入函数home的内部,而且现在可以普遍用于所有函数。任何函数都可以使用或更新此类变量。

选项2:

或者,您可以尝试将q作为函数参数传递。

在下面的示例中,您将调用函数search,但添加了参数qsearch函数本身将引用与称为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)

答案 1 :(得分:1)

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>

现在您将在网址中看到/search.html?q=top,现在您可以使用q=top轻松传递此q=request.args.get("q") ...

@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()

答案 2 :(得分:0)

您的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>

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

现在,您将在网址中看到/search.html?q=top 现在您可以轻松地传递此q = top 使用

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

答案 3 :(得分:0)

定义一个全局列表,将第一个视图函数中的变量附加到列表中,并访问第二个视图函数中的最后一个索引值。

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)