为什么没有选项可以将自定义网址转换器添加到主应用程序等蓝图中?

时间:2014-01-07 16:58:13

标签: python werkzeug flask

this postofficial docs中,我们了解了如何为主应用对象添加自定义网址转换器。 这是一个简短的例子:

app = Flask(__name__)
app.url_map.converters['list'] = ListConverter

但如何为蓝图做到这一点?此全局(应用程序级别)自定义转换器不可用于蓝图。 在源代码中我没有找到这样的可能性......

1 个答案:

答案 0 :(得分:2)

在蓝图上无法使用自定义URL转换器的技术原因是,与应用程序不同,蓝图没有URL映射。

当您使用蓝图的route装饰器或add_url_map()方法时,所有蓝图都会记录在调用register_blueprint()后调用这些方法的应用程序版本的意图。

我不确定允许蓝图特定的网址转换器有什么好处。但我认为允许蓝图安装app wide转换器是合理的。这可以使用与其他蓝图应用程序范围处理程序相同的技术,例如before_app_request

def add_app_url_converter(self, name, f):
    self.record_once(lambda s: s.app.url_map.converters[name] = f
    return f

Blueprint.add_app_url_converter = add_app_url_converter

# ...

bp = Blueprint('mybp', __name__)
bp.add_app_url_converter('list', ListConverter)