Wewnątrz planu kolby, mam:Za pomocą Flask Blueprint, jak naprawić url_for przed złamaniem, jeśli określono poddomeny?
frontend = Blueprint('frontend', __name__)
i trasa do mojej funkcji indeksu jest:
@frontend.route('/')
def index():
#code
Działa to dobrze, ale próbuję dodać subdomenę na trasie, tak:
@frontend.route('/', subdomain='<var>')
def index(var):
Ale to przerywa aplikację i przeglądarka wypluwa (między innymi):
werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)
frontend.index nazywa się w moim kodu w kilku miejscach w url_for („”) frontend.index
Jak mogę uzyskać url_for pracować, kiedy jestem w tym subdomeny? Jedyną rzeczą w dokumentach znajdę i myślę, że może to być istotne jest pod http://flask.pocoo.org/docs/api/:
Aby zintegrować aplikacje, kolba ma hak do przechwytywania URL budować błędów poprzez Flask.build_error_handler. Url_for function skutkuje w błędzie BuildError, gdy bieżąca aplikacja nie ma adresu URL dla podanego punktu końcowego i wartości podany jako . Gdy tak się stanie, current_app wywołuje jego build_error_handler, jeśli nie jest None, która może zwrócić ciąg znaków do użycia jako wynik url_for (zamiast domyślnego url_for do podniesienia wyjątku BuildError) lub ponownie podnieść wyjątek. Przykład:
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
Jednak Jestem nowym python (i programowanie) i nie może zrozumieć, gdzie chciałbym umieścić ten kod i jak dostanę tę funkcję, aby zadzwonić po wystąpieniu builderror.
Każdy wgląd byłoby bardzo mile widziane :)
Czy próbowali dodanie '_external = True'' do url_for() zadzwonić? –
@chrickso: Zobacz moją odpowiedź. Wygląda na to, że musisz podać tylko różne nazwy metod. – pyfunc