Flask的蓝图让我在注册蓝图时传递可选值。 但是我如何在以后获得它们呢?
from flask import Blueprint, g
bp = Blueprint('test', __name__, url_prefix='/test')
@bp.route('/')
def index():
... now where do I get the value of `foo` from? ...
app.register_blueprint(bp, foo="bar")
答案 0 :(得分:1)
据我所知,您传递给register_blueprint
的选项仅用于Flask的蓝图内部设置(例如,配置url_prefix,子域等选项)。它们不是在要求时提供的。
如果您解释为什么要从请求中访问该值,这可能会有所帮助吗?
您是否考虑使用可插拔视图?
http://flask.pocoo.org/docs/views/
使用视图,您可以继承View
,然后覆盖__init__
以传递可在请求中使用的值。
你也可以将Blueprint子类化并做同样的事情,它只是更多的代码&复杂。我做了here之类的事情(参见BlueprintWrapper)。虽然如果我要重写它,我会试图摆脱元类。
答案 1 :(得分:1)
您传递给register_blueprint
的选项最终会传递给werkzeug.routing.Rule
,而且似乎不会存储在其间的任何位置。
正如我们从constructor of Rule中看到的那样,您提供的所有不相关参数都将被删除。
class Rule(RuleFactory):
def __init__(self, string, defaults=None, subdomain=None, methods=None,
build_only=False, endpoint=None, strict_slashes=None,
redirect_to=None, alias=False, host=None)
这意味着您可能无法成功访问foo
,除非您创建了一个Blueprint的子类来存储它。