flask 将变量从一个函数传递到另一个函数
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)
选项 1:
在函数内部创建和更新的变量仅适用于该函数。
来自Python documentation...
"If a variable is assigned a value anywhere within the function’s body,
it’s assumed to be a local unless explicitly declared as global."
解决方案:
将 q
创建为函数 外部函数 的变量,这样它不仅被困在函数 home
内部,而且现在对所有函数都普遍可用。任何函数都可以使用或更新这样的变量。
选项 2:
或者,您可以尝试将 q
作为 函数参数传递 。
在下面的示例中,您将调用函数 search
但添加了参数 q
。 search
函数本身将引用相同的 q
作为一个叫做 input
的东西(或者选择你自己的 name/word)。
@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)
其中 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()
您的 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")
定义一个全局列表,将第一个视图函数中的变量附加到列表中,并访问第二个视图函数中的最后一个索引值。
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)
正如你看到的代码。
我想将变量 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)
选项 1:
在函数内部创建和更新的变量仅适用于该函数。
来自Python documentation...
"If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global."
解决方案:
将 q
创建为函数 外部函数 的变量,这样它不仅被困在函数 home
内部,而且现在对所有函数都普遍可用。任何函数都可以使用或更新这样的变量。
选项 2:
或者,您可以尝试将 q
作为 函数参数传递 。
在下面的示例中,您将调用函数 search
但添加了参数 q
。 search
函数本身将引用相同的 q
作为一个叫做 input
的东西(或者选择你自己的 name/word)。
@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)
其中 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()
您的 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")
定义一个全局列表,将第一个视图函数中的变量附加到列表中,并访问第二个视图函数中的最后一个索引值。
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)