Frage

ich das Login von flaskr Beispielanwendung ändern, den ersten Zeile get Fehler. Aber www.html ist in der Vorlage Richt.

return redirect(url_for('www'))
#return redirect(url_for('show_entries'))

Anzeigefehler:

werkzeug.routing.BuildError

BuildError: ('www', {}, None) 
War es hilfreich?

Lösung

return redirect(url_for('www')) funktionieren würde, wenn Sie eine Funktion irgendwo anders aussehen:

@app.route('/welcome')
def www():
    return render_template('www.html')

url_for Aussehen für eine Funktion, übergeben Sie es dem name der Funktion, die Sie Aufruf fehlen. Betrachten Sie es wie folgt aus:

@app.route('/login')
def sign_in():
    for thing in login_routine:
        do_stuff(thing)
    return render_template('sign_in.html')

@app.route('/new-member')
def welcome_page():
    flash('welcome to our new members')
    flash('no cussing, no biting, nothing stronger than gin before breakfast')
    return redirect(url_for('sign_in')) # not 'login', not 'sign_in.html'

Sie können auch return redirect('/some-url') tun, wenn die leichter zu merken sind. Es ist auch möglich, dass das, was Sie wollen, ist Ihre erste Linie gegeben, ist nur return render_template('www.html').

Und auch nicht von shuaiyuancn Kommentar unten, wenn Sie Pläne verwenden, sollte url_for als url_for('blueprint_name.func_name') aufgerufen werden Hinweis: Sie werden das Objekt nicht vorbei, sondern die Zeichenfolge. Siehe Dokumentation hier //flask.pocoo.org/docs/1.0/blueprints/#building-urls

Andere Tipps

, dass def www(): Unter der Annahme, bereits definiert ist (wie von post ehrfürchtige Antwort vorgeschlagen), kann dieser Fehler auch geworfen werden , wenn Sie eine Vorlage verwenden, die nicht registriert worden ist.

Stellen Sie sicher, diese zu registrieren, wenn app zuerst instanziiert. Für mich war es so gemacht:

from project.app.views.my_blueprint import my_blueprint
app = Flask(__name__, template_folder='{}/templates'.format(app_path), static_folder='{}/static'.format(app_path))
app.register_blueprint(my_blueprint)

Und innerhalb my_blueprint.py:

from flask import render_template, Blueprint
from flask_cors import CORS

my_blueprint = Blueprint('my_blueprint', __name__, url_prefix='/my-page')
CORS(my_blueprint)


@metric_retriever.route('/')
def index():
    return render_template('index.html', page_title='My Page!')

Ich kam in diesem Fehler

BuildError: ( 'project_admin', {}, None)

, wenn ich habe einen Anruf wie

return redirect(url_for('project_admin'))

, in dem ich versuche, wurde die project_admin Funktion in meinem Blueprint zu verweisen. Um den Fehler zu beheben, habe ich einen Punkt vor dem Namen der Funktion, wie folgt aus:

return redirect(url_for('.project_admin'))

und voila, mein Problem gelöst wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top