如何将构造函数参数传递给Flask蓝图?

时间:2014-02-23 15:08:33

标签: python flask

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

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

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

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

我该如何做到这一点?或者,我可以访问蓝图本身中的 url_prefix 吗?

2 个答案:

答案 0 :(得分:2)

我不确定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,但值得一试......

答案 1 :(得分:0)

request对象有几个属性可用于获取Blueprint对象的url_prefix

也许request.script_root就是你想要的。有关详细信息,建议使用Flask documentation about request object