app.url_map
хранит объект, который отображает и соответствует правилам с концами. app.view_functions
отображает конечные точки для просмотра функций.
Позвоните match
, чтобы соответствовать URL-адресу конечной точке и значениям. Он будет увеличивать 404, если маршрут не найден, и 405, если указан неправильный метод. Вам понадобится метод, а также соответствующий URL.
Перенаправления рассматриваются как исключения, вам нужно поймать и протестировать их рекурсивно, чтобы найти функцию просмотра.
Можно добавлять правила, которые не отображаются в соответствии с видами, вам нужно поймать KeyError
при просмотре представления.
from werkzeug.routing import RequestRedirect, MethodNotAllowed, NotFound
def get_view_function(url, method='GET'):
"""Match a url and return the view and arguments
it will be called with, or None if there is no view.
"""
adapter = app.url_map.bind('localhost')
try:
match = adapter.match(url, method=method)
except RequestRedirect as e:
# recursively match redirects
return get_view_function(e.new_url, method)
except (MethodNotAllowed, NotFound):
# no match
return None
try:
# return the view function and arguments
return app.view_functions[match[0]], match[1]
except KeyError:
# no view is associated with the endpoint
return None
Есть еще много вариантов, которые могут быть переданы bind
осуществить, как делаются спички, см документации для деталей.
Функция просмотра также может вызывать ошибки 404 (или другие), поэтому это гарантирует, что URL-адрес будет соответствовать представлению, а не то, что представление возвращает ответ 200.
Возможно, вас заинтересует [url_for] (http://flask.pocoo.org/docs/0.11/quickstart/#url-building). – squiguy
@squiguy, 'url_for' генерирует URL-адрес от« конечной точки »и дополнительных« значений ». Я хочу взять URL-адрес и найти связанную «конечную точку», если она соответствует ей. В каком-то смысле мне нужно противопоставить 'url_for'. –