Flask:在视图代码中获取Blueprint选项

时间:2014-03-06 06:55:45

标签: python flask

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")

2 个答案:

答案 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的子类来存储它。