Почему нет возможности добавить пользовательские конвертеры URL-адресов в чертежи, как для основного приложения?

В этом сообщении и в официальные документы мы увидели, как добавить пользовательские преобразователи URL для основного объекта приложения. Вот краткий пример:

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

Но как это сделать для чертежей? Этот глобальный (на уровне приложения) настраиваемый преобразователь недоступен для чертежей. В исходном коде я не нашел такой возможности...


person Vitalii Ponomar    schedule 07.01.2014    source источник


Ответы (1)


Техническая причина, по которой вы не можете иметь пользовательские преобразователи 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)
person Miguel    schedule 08.01.2014
comment
О, можно добавить все широкоформатные преобразователи чертежей! Все, что нам нужно, это зарегистрировать такой конвертер для приложения и только после этого зарегистрировать все чертежи (а не наоборот, как я) - person Vitalii Ponomar; 09.01.2014