フラスコの青写真の中に、私は持っています:
frontend = Blueprint('frontend', __name__)
インデックス関数へのルートは次のとおりです。
@frontend.route('/')
def index():
#code
これは正常に機能しますが、次のように、ルートにサブドメインを追加しようとしています。
@frontend.route('/', subdomain='<var>')
def index(var):
しかし、これはアプリを壊し、ブラウザは(とりわけ)吐き出します:
werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)
frontend.indexは、私のコードのurl_for('frontend.index')のいくつかの場所で呼び出されます。
サブドメインを含めるときにurl_forを機能させるにはどうすればよいですか?私が見つけることができ、関連があると思うドキュメントの中で唯一のものは、 http: //flask.pocoo.org/docs/api/の下にあります:
アプリケーションを統合するために、FlaskにはFlask.build_error_handlerを介してURLビルドエラーをインターセプトするフックがあります。現在のアプリに特定のエンドポイントと値のURLがない場合、url_for関数はBuildErrorを引き起こします。その場合、current_appはNoneでない場合にbuild_error_handlerを呼び出します。これにより、url_forの結果として使用する文字列が返され(url_forのデフォルトでBuildError例外が発生する代わりに)、または例外が再発生します。例:
def external_url_handler(error, endpoint, **values):
"Looks up an external URL when `url_for` cannot build a URL."
# This is an example of hooking the build_error_handler.
# Here, lookup_url is some utility function you've built
# which looks up the endpoint in some external URL registry.
url = lookup_url(endpoint, **values)
if url is None:
# External lookup did not have a URL.
# Re-raise the BuildError, in context of original traceback.
exc_type, exc_value, tb = sys.exc_info()
if exc_value is error:
raise exc_type, exc_value, tb
else:
raise error
# url_for will use this result, instead of raising BuildError.
return url
app.build_error_handler = external_url_handler
ただし、私はPython(およびプログラミング)に不慣れであり、このコードをどこに配置するか、またはビルドエラーが発生したときにその関数をどのように呼び出すかを理解できません。
どんな洞察も大歓迎です:)