我有一个包含以下三个文件的烧瓶项目:
# app.py
from flask import Flask
from userbp import bp
app = Flask(__name__)
app.register_blueprint(bp)
@app.route("/")
def index():
return "Hello, world"
# userbp.py
from flask import Blueprint
bp = Blueprint("user", __name__, url_prefix="/user")
# user_views.py
from userbp import bp
@bp.route("/<string:name>")
def greet(name):
return f"Hello, {name}! How are you?"
这是该项目根目录的结构:
.
├── __pycache__
│ ├── app.cpython-311.pyc
│ └── userbp.cpython-311.pyc
├── app.py
├── user_views.py
└── userbp.py
它没有按预期工作,点击 URL
/John
会出现 494 未找到错误。如果我将 greet
视图从 user_views.py
移动到 userbp.py
,它会按预期工作。
为什么会这样呢?
如何解决这个问题?
谢谢。
这个问题有 2 个解决方案。
sub-route
应定义与 blueprint
启动相同。所以你的代码应该是这样的
# app.py
from flask import Flask
# import blueprint from userbp.py
from userbp import bp
app = Flask(__name__)
app.register_blueprint(bp)
@app.route("/")
def index():
return "Hello, world"
if __name__ == "__main__":
app.run()
# userbp.py
from flask import Blueprint
# initialization of blueprint
bp = Blueprint("user", __name__, url_prefix="/user")
## implementation of sub-route blueprints
@bp.route("/<string:name>")
def greet(name):
return f"Hello, {name}! How are you?"
# app.py
from flask import Flask
# import blueprint from user_views.py
from user_views import bp
app = Flask(__name__)
app.register_blueprint(bp)
@app.route("/")
def index():
return "Hello, world"
if __name__ == "__main__":
app.run()
# userbp.py
from flask import Blueprint
bp = Blueprint("user", __name__, url_prefix="/user")
# user_views.py
from userbp import bp
@bp.route("/<string:name>")
def greet(name):
return f"Hello, {name}! How are you?"
这样就可以了。
问题是,为什么显示错误未找到导致您访问错误的路线。
应该是这样的http://localhost:5000/user/john。 因为在蓝图中你的代码被定义为子路由
user
在这里
bp = Blueprint("user", __name__, url_prefix="/user")