【问题标题】:How do I pass constructor arguments to a Flask Blueprint?如何将构造函数参数传递给 Flask 蓝图?
【发布时间】:2014-02-23 15:08:33
【问题描述】:

在 Flask 网站中,我想创建一个名为 gallery 的蓝图,它是一个灯箱/艺术画廊应用程序,但有多个实例。例如,

app.register_blueprint(gallery,url_prefix='/photos')
app.register_blueprint(gallery,url_prefix='/paintings')

但是我希望画廊的两个实例具有完全独立的内容源,因此蓝图需要一个额外的参数,即

app.register_blueprint(gallery,url_prefix='/photos',source_directory='content/photos/')
app.register_blueprint(gallery,url_prefix='/paintings',source_directory='content/paintings/')

我怎样才能做到这一点?或者,我可以访问蓝图本身中的 url_prefix 吗?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    我不确定 Flask 是否实现了 Werkzeug 所做的所有路由功能(Flask 基于 Werkzeug),但在 werkzeug 中您可以使用 any 路由,如下所示:

    gallery = Blueprint(__name__, __name__, url_prefix='/<any("photos,paintings"):source>')
    

    如果您在视图上使用@gallery.route,您将获得一个参数source,您可以使用它来确定您的源目录。

    @gallery.route('/show')
    def show(source):
        # Show stuff based on source being "photos" or "paintings"
    

    不确定这是否适用于 Flask,但值得一试...

    【讨论】:

      【解决方案2】:

      request对象的几个属性可以用来获取蓝图对象的url_prefix

      也许request.script_root 正是您想要的。更多信息,推荐Flask documentation about request object

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多