为什么没有像主应用程序那样将自定义url转换器添加到蓝图中的选项



在这篇文章和官方文档中,我们看到了如何为主应用程序对象添加自定义url转换器。下面是一个简短的例子:

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

但是蓝图怎么做呢?此全局(应用程序级别)自定义转换器不可用于蓝图。在源代码中,我还没有发现这样的可能性。。。

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

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

我不确定允许特定于蓝图的url转换器是否有好处。但我认为允许蓝图安装应用程序范围的转换器是合理的。这可以使用与其他蓝图应用程序范围的处理程序相同的技术,例如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)

最新更新