質問

Flaskrサンプルアプリのログインを変更します。最初の行はエラーを取得します。しかし、www.htmlはテンプレートdirにあります。

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

ディスプレイエラー:

werkzeug.routing.BuildError

BuildError: ('www', {}, None) 
役に立ちましたか?

解決

return redirect(url_for('www')) このような他の場所に機能がある場合は機能します。

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

url_for 関数を探し、それを渡します 名前 あなたが呼びたい関数の。このように考えてください:

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

あなたもできます return redirect('/some-url'), 、それが覚えやすい場合。あなたが望むものは、あなたの最初の行を考えると、ただ return render_template('www.html').

また、BluePrintsを使用している場合は、以下のShuaiyuancnのコメントからではありません。 url_for として呼び出す必要があります url_for('blueprint_name.func_name') オブジェクト、むしろ文字列を渡すのではないことに注意してください。 こちらのドキュメントを参照してください.

他のヒント

仮定して def www(): すでに定義されています(アンマウントの素晴らしい答えによって示唆されているように)、このエラーはスローすることもできます 登録されていない青写真を使用している場合。

これらをいつ登録してください app 最初にインスタンス化されます。私にとってそれはこのように行われました:

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)

そして内部 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!')

このエラーに出会いました

builderror:( 'project_admin'、{}、none)

電話があったとき

return redirect(url_for('project_admin'))

私が参照しようとしていた project_admin 私の青写真内の機能。エラーを解決するために、このような関数の名前の前にドットを追加しました。

return redirect(url_for('.project_admin'))

そして出来上がり、私の問題は解決されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top