これは私がurl_for()
を見て、それを逆にこの目的のためにハッキングです:
from flask.globals import _app_ctx_stack, _request_ctx_stack
from werkzeug.urls import url_parse
def route_from(url, method = None):
appctx = _app_ctx_stack.top
reqctx = _request_ctx_stack.top
if appctx is None:
raise RuntimeError('Attempted to match a URL without the '
'application context being pushed. This has to be '
'executed when application context is available.')
if reqctx is not None:
url_adapter = reqctx.url_adapter
else:
url_adapter = appctx.url_adapter
if url_adapter is None:
raise RuntimeError('Application was not able to create a URL '
'adapter for request independent URL matching. '
'You might be able to fix this by setting '
'the SERVER_NAME config variable.')
parsed_url = url_parse(url)
if parsed_url.netloc is not "" and parsed_url.netloc != url_adapter.server_name:
raise NotFound()
return url_adapter.match(parsed_url.path, method)
このメソッドの戻り値は最初の要素はとエンドポイント名と第二の辞書であることと、タプルです議論。
私はそれを広範囲にテストしていませんが、すべてのケースで私にとってはうまくいきました。
なぜこれをやりたいのですか?このようなことはFlask自身(通常、Mapの 'match()'メソッドを使用して処理されます)。なぜあなたはフラスケがすでにしていることをする必要がありますか? –
@MarkHildreth:リソースURLを引数として取得し、それをデコードしてエンドポイントと引数に戻す必要がある場合は、これをRESTful APIに使用します。 – Miguel
これはまさに私のシナリオです。私はRESTサービスを構築しています。 – lyschoening