首页 > 解决方案 > URL_for 在烧瓶蓝图中找不到其他视图

问题描述

我正在尝试将我的烧瓶网站分成多个文件,因此我在一个文件中创建了蓝图,我可以将其导入 main. 但是,当我尝试运行它时,它会找到第一个视图(chess_home),但是当我提交时,它找不到下一个视图(chess)。特别是 URL_For 函数不起作用,当我手动将所有信息输入浏览器时,它就起作用了。

openings_guru = Blueprint('openings_guru', __name__, template_folder='templates')
@openings_guru.route("/chess/", methods=['POST', 'GET'])
def chess_home():
    if request.method == "POST":
        id = request.form["id"]
        color = request.form["color"]
        months = request.form['months']
        sort = request.form['sort']
        return redirect(url_for("chess", id=id, color=color, months=months, sort=sort))
    else:
        return render_template("chess.html")


@openings_guru.route("/chess/<id>/<color>/<months>/<sort>/")
def chess(id, color, months, sort):
[2021-05-08 12:33:16,332] ERROR in app: Exception on /chess/ [POST]
Traceback (most recent call last):
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/mattb/PycharmProjects/website/chess.py", line 59, in chess_home
    return redirect(url_for("chess", id=id, color=color, months=months, sort=sort))
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/helpers.py", line 370, in url_for
    return appctx.app.handle_url_build_error(error, endpoint, values)
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/app.py", line 2216, in handle_url_build_error
    reraise(exc_type, exc_value, tb)
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/flask/helpers.py", line 358, in url_for
    endpoint, values, method=method, force_external=external
  File "/Users/mattb/miniconda3/envs/b529/lib/python3.7/site-packages/werkzeug/routing.py", line 2179, in build
    raise BuildError(endpoint, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'chess' with values ['color', 'id', 'months', 'sort']. Did you mean 'home' instead?

标签: pythonflask

解决方案


当我们使用蓝图时,我们还需要更改 url_for 函数,例如:url_for("chess")变为url_for("Chess.chess")where Chess 是蓝图的名称。


推荐阅读