gpt4 book ai didi

python - 带有可插入 View 的 flask 扩展中的 url_for Builderror

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:49 24 4
gpt4 key购买 nike

我正在为 flask 构建一个简单的扩展,但 url_for 函数无法在扩展中构建 url 时遇到问题。

有人可以帮我弄清楚我在这里缺少什么吗?

我简化了代码来演示这个问题(所有 url_for 调用都会引发 werkzeug BuildError 异常):

import flask
import flask.views

import logging
logging.basicConfig(level=logging.DEBUG)

class MyFlaskExt(object):
def __init__(self, app=None):
if app is not None:
self.init_app(app)

def init_app(self, app):
self.blueprint = flask.Blueprint('myext', __name__, static_folder='static', template_folder='templates')
self.blueprint.add_url_rule('/', view_func=RootView.as_view('root'), endpoint='root')
self.blueprint.add_url_rule('/var/<somevar>', view_func=VarView.as_view('var'), endpoint='var')
self.blueprint.add_url_rule('/novar', view_func=NoVarView.as_view('novar'), endpoint='novar')
app.register_blueprint(self.blueprint)


class RootView(flask.views.View):
def dispatch_request(self):
logging.debug(flask.url_for('novar'))
logging.debug(flask.url_for('novar', _external=True))
return flask.redirect(flask.url_for('var', somevar='test'))

class VarView(flask.views.View):
def dispatch_request(self, somevar):
return "SUCCESS! ({})".format(somevar)

class NoVarView(flask.views.View):
def dispatch_request(self):
return "SUCCESS!"

if __name__ == '__main__':
app = flask.Flask(__name__)
app.debug = True
my_ext = MyFlaskExt()
my_ext.init_app(app)
logging.debug(app.url_map)
app.run()

最佳答案

Blueprint 端点以 Blueprint 的名称注册。如果我没记错的话,您需要在 url_for 调用前加上“.”。 (如果他们都将在同一蓝图下运作)或使用全名:

def dispatch_request(self):
logging.debug(flask.url_for('.novar'))
logging.debug(flask.url_for('.novar', _external=True))
return flask.redirect(flask.url_for('.var', somevar='test'))

关于python - 带有可插入 View 的 flask 扩展中的 url_for Builderror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com