2015-03-23 4 views
5

Ich habe eine komplexe Kolbenapplikation mit mehreren Flask-Instanzen, die von Werkzeug Middleware verschickt werden. Und in einer solchen Situation habe ich zwei Fragen, die eigentlich nicht mit url_for zusammenhängen, sondern mit dem flash context management.url_for innerhalb verschiedener Flask-Instanzen

1) Wie erstelle ich URL von einer Anwendung zur anderen?

2) Hauptsächlich - wie erstelle ich URL für spezifische Anwendung ohne app_context überhaupt. Zum Beispiel muss ich eine URL beim Import oder Sellerie-Aufgabe erstellen. Ich habe versucht, Wrapper über alle Anwendungsinstanzen zu tun und neu definieren url_for wie

def url_for(self, *args, **kwargs): 
    with self.app.app_context(): 
     return url_for(*args, **kwargs) 

erhielt aber nur Fehler folgenden „war Anwendung nicht in der Lage einen URL-Adapter für die Anforderung unabhängiger URL Generation zu erstellen. Sie könnten in der Lage, dies zu beheben, indem Sie Festlegen der SERVER_NAME-Konfigurationsvariablen. " Irgendwelche Vorschläge?

Update: meine Lösung für die zweite Problem war richtig, nur SERVER_NAME hinzuzufügen nötig, aber erste ist noch offen

+1

Haben Sie jemals eine Lösung gefunden? –

+0

Ich habe den benutzerdefinierten URL-Builder für jede Anwendung beendet und verwende ihre Routen. Es gibt keinen anderen Weg, Flask bietet überhaupt keine Unterstützung für Multi-App-Architektur = ( – free2use

+0

) Jede Chance, die Sie eine verallgemeinerte Version teilen könnten? –

Antwort

1

endete ich für jede Anwendung getrennt url Builder Erstellen up

absolute_url_adapter = app.url_map.bind_to_environ({ 
    'wsgi.url_scheme': 'http', 
    'HTTP_HOST': app.config['SERVER_NAME'], 
    'SCRIPT_NAME': app.url_prefix, 
    'REQUEST_METHOD': 'GET', 
}) 

url_prefix - ist url, mit dem Dispatcher Versendungen

dann in jeder Anwendung anfordert, verwenden Sie es so, dass

absolute_url_adapter.build('main.main', force_external=True) 
Verwandte Themen