繁体   English   中英

Flask 错误:连接到 web 服务时出现 werkzeug.routing.BuildError

[英]Flask error: werkzeug.routing.BuildError when connecting to web service

出于教育目的,我们正在构建一个非常简单的 Flask 应用程序。 虽然它在本地运行顺利,但当我将代码复制到我的虚拟专用服务器时它不再运行。

路由定义如下:

from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def sign_up():
...

这是使用自动完成的 function:

    with connection.cursor() as cursor:
        sql = f"SELECT * FROM movies WHERE title"
        query = cursor.execute(sql)
        data = cursor.fetchall()
        # from flask import jsonify
        results = [data[i]['title'] for i in range(len(data))]

    return render_template("autocomplete.html", results=results)

autocomplete.html位于模板文件夹中,该文件夹位于 Python 程序文件旁边。

web 服务是这样启动的:

if __name__ == '__main__':
    app.run(host='0.0.0.0')

我可以成功启动 web 服务,但是当我使用 URL 连接时,它返回 500 错误,并且服务器控制台显示:

[2020-05-28 16:19:47,099] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/root/miniconda3/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app.py", line 94, in sign_up
    return render_template("autocomplete.html", results=results)
  File "/root/miniconda3/lib/python3.7/site-packages/flask/templating.py", line 140, in render_template
    ctx.app,
  File "/root/miniconda3/lib/python3.7/site-packages/flask/templating.py", line 120, in _render
    rv = template.render(context)
  File "/root/miniconda3/lib/python3.7/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/root/miniconda3/lib/python3.7/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/root/miniconda3/lib/python3.7/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "/root/recommender/app-flask/templates/autocomplete.html", line 10, in top-level template code
    $.getJSON("{{url_for('autocomplete')}}",{
  File "/root/miniconda3/lib/python3.7/site-packages/flask/helpers.py", line 370, in url_for
    return appctx.app.handle_url_build_error(error, endpoint, values)
  File "/root/miniconda3/lib/python3.7/site-packages/flask/app.py", line 2216, in handle_url_build_error
    reraise(exc_type, exc_value, tb)
  File "/root/miniconda3/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/root/miniconda3/lib/python3.7/site-packages/flask/helpers.py", line 358, in url_for
    endpoint, values, method=method, force_external=external
  File "/root/miniconda3/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 'autocomplete'. Did you mean 'static' instead?

我认为这是因为 URL 发生了变化,但我不知道如何解决这个问题。

任何人都可以帮忙吗?

$.getJSON("{{url_for('autocomplete')}}",{ => 您的代码在这一行有误,请阅读 flask 中有关url_for的更多信息。

它需要像这样渲染路由: <blueprint_name>.<function_name>如果使用app作为路由使用可以跳过blueprint_name => 例如: .sign_up 示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM