Mit Kolben Blaupausen, wie zu beheben url_for bricht ab, wenn eine subdomain angegeben ist?

Innerhalb einer Flasche Blaupause, die ich habe:

frontend = Blueprint('frontend', __name__)

und die route zu meiner index-Funktion ist:

@frontend.route('/')
def index():
  #code

Dieser funktioniert einwandfrei, aber, ich bin versucht, fügen Sie eine subdomain auf der Strecke, etwa so:

@frontend.route('/', subdomain='<var>')
def index(var):

Aber das bricht die app und der browser spuckt dann (unter anderem):

werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)

frontend.index heißt in meinem code an ein paar stellen in einem url_for('frontend.index')

Wie bekomme ich die url_for zu arbeiten, wenn ich bin auch ein subdomain? Das einzige, was in den Dokumenten, die ich finden kann und ich denke, die relevant sein könnte, ist dies unter http://flask.pocoo.org/docs/api/:

Integrieren Anwendungen, Fläschchen hat einen Haken abfangen, die URL bauen
Fehler durch Fläschchen.build_error_handler. Die url_for Funktion Ergebnisse
in einem BuildError, wenn die aktuelle app nicht über eine URL-Adresse für den angegebenen
Endpunkt und Werte. Wenn Sie es tut, die current_app ruft seine
build_error_handler wenn es nicht None ist, die einen string zurückgeben, um zu
als Ergebnis url_for (statt url_for Standard zu erhöhen
die BuildError Ausnahme) oder re-raise Ausnahme. Ein Beispiel:

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

Jedoch, ich bin neu in python (und Programmierung) und kann nicht verstehen, wo ich diesen code einfügen oder wie würde ich diese Funktion aufrufen, wenn ein builderror Auftritt.

Jede Einsicht wäre sehr geschätzt 🙂

  • Haben Sie versucht, indem _external=True zu Ihrem url_for () - Aufruf?
  • Siehe meine Antwort. Wie es aussieht, werden Sie brauchen, um verschiedene Methode Namen.
InformationsquelleAutor chrickso | 2012-05-10
Schreibe einen Kommentar