1
votes

TypeError: url_for () prend 1 argument positionnel mais 2 ont été donnés

Si x = ohio

Je souhaite rediriger l'utilisateur vers / weather / ohio

Tout ce que j'ai pu me rendre au travail est / weather /? x = ohio

Je fais cela donc une seconde route @ app.route ("/ weather /") sera exécutée. Je ne suis pas sûr de ce qui me manque. EST-ce la meilleure façon de charger / weather / ohio, où ohio est une variable chargée à partir d'un formulaire.

    @app.route("/weather/", methods = ['POST', 'GET'])
def weather():
    if request.method == 'POST':
        x = request.form['search_location']
        return redirect(url_for('weather', x=x))
        #print (y)
    else:
        return render_template("weather.html")

Si je prends le x = out, j'obtiens l'erreur "TypeError: url_for () prend 1 argument positionnel mais 2 ont été donnés"


2 commentaires

Si l'une des réponses a aidé, envisagez de la marquer comme telle, afin que d'autres personnes ayant le même problème puissent également trouver la solution


Il s'avère que le problème était que le problème était que la redirection de retour (url_for ('weather', x = x)) pointait vers la mauvaise fonction, elle était supposée être des conditions météorologiques NON météorologiques.


3 Réponses :


0
votes

Il prend des arguments de mot-clé pour les variables:

url_for('add', variable=x)


1 commentaires

Le problème est qu'en utilisant votre exemple, l'URL devient 127.0.0.1:5000/weather/?variable= ohio quand j'ai besoin de 127.0.0.1:5000/weather/ohio



0
votes

Si je comprends bien votre question, vous souhaitez un itinéraire dynamique?

Consultez ici https://www.tutorialspoint.com/flask/flask_variable_rules.htm

@app.route("/weather/<variable>", methods = ['POST', 'GET'])


3 commentaires

J'ai un de que je remplis et je veux que les données du formulaire soient transmises dans l'url comme / weather / donc si ohio est entré dans le formulaire, je veux que / weather / ohio soit rediriger vers.


à partir de ce formulaire, transmettez la variable dont vous avez besoin à l'itinéraire que je viens de vous montrer, puis transmettez-la à votre fonction. Consultez le didacticiel que j'ai lié et lisez la documentation du flask, qui explique très bien cela


Je ne vois aucun exemple de variables dans la redirection (url_for



2
votes

Vous devez avoir le deuxième point de terminaison avec une variable de chemin et donner à url_for () le nom de la fonction associée au point de terminaison:

@app.route("/weather", methods = ["POST", "GET"])
def weather():
    if request.method == "POST":
        x = request.form["search_location"]
        return redirect(url_for("weather_location", x=x))
    else:
        return render_template("weather.html")

@app.route("/weather/<x>")
def weather_location(x):
    return "It's always sunny in {}".format(x)

Jetez un œil à cette autre question pour peut-être un peu plus de clarté.


0 commentaires