Como puedes ver el código. Quiero pasar la variable q de la función home() a la función 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)
2
nupur 11 may. 2019 a las 11:42

3 respuestas

La mejor respuesta

Donde una index.html contendrá:

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

Ahora verá /search.html?q=top en la URL, ahora puede pasar fácilmente este q=top utilizando 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
VC.One 16 may. 2019 a las 15:26

Opción 1:

Una variable creada y actualizada dentro de una función solo existe para esa función.

Del Documentación de Python...

"Si a una variable se le asigna un valor en cualquier lugar dentro del cuerpo de la función, se supone que es local a menos que se declare explícitamente como global ".


Solución:
Cree q como una variable fuera de las funciones , de esta manera no solo queda atrapado dentro de la función home sino que ahora está universalmente disponible para todas y cada una de las funciones. Cualquier función puede usar o actualizar dicha variable.

Opción 2:

Alternativamente, puede intentar pasar q como un parámetro de función .

En el ejemplo a continuación, llamará a la función search pero con el parámetro q agregado. La función search en sí misma hará referencia al mismo q como una cosa llamada input (o elija su propio nombre / palabra).

@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
VC.One 11 may. 2019 a las 16:34

Su index.html contendrá

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

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

Ahora verá /search.html?q=top en la URL ahora puede pasar fácilmente este q = top usando

q=request.args.get("q")
0
nupur 13 may. 2019 a las 11:42