переменная передачи колбы от одной функции к другой функции - PullRequest
0 голосов
/ 11 мая 2019

Как видите код. Я хочу передать переменную 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)

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Где 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 в URL, теперь вы можете легко передать это 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()
1 голос
/ 11 мая 2019

Опция 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)
0 голосов
/ 13 мая 2019

Ваш 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 в URL, теперь вы можете легко передать этот q = top, используя

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