2014-01-07 13 views
2

this postofficial docs我们看到了如何为主应用程序对象添加自定义url转换器。 下面是简单的例子:为什么没有选项可以将自定义url转换器添加到蓝图中,比如主应用程序?

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

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

回答

2

蓝图上不能有自定义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) 
+1

O,可以添加所有蓝图宽转换器!我们所需要的只是注册这种转换器的应用程序,然后才能注册所有蓝图(而不是像我一样) –

相关问题