2016-11-26 6 views
3

Ich brauche zwei Subdomains in diesem Bauplan erlaubt. In diesem Fall, pt und br. Wie kann ich das machen? Soweit ich weiß, kann ich nur einen Sub-Domain-Parameter haben. Ich möchte diese Funktion für beide Sprachen [pt und br] verwenden.Mehrere Subdomains in demselben Bauplan erlaubt

mod = Blueprint('landing', __name__, url_prefix='/', subdomain='pt') 

@mod.route('/', methods=['GET']) 
def index(): 
    pass 

Ich möchte dynamic Sub-Domains zu vermeiden, weil ich nicht will alle meine url_for() ändern.

Antwort

5

Sie den Bauplan des Präfix und Sub-Domain nicht definieren, wo Sie es derzeit tun, definiert es wie so:

mod = Blueprint('landing', __name__) 

Dann einfach den Bauplan zweimal registrieren, eine für jede Sub-Domain:

app.register_blueprint(mod, subdomain='pt', url_prefix='/') 
app.register_blueprint(mod, subdomain='br', url_prefix='/') 

EDIT:

Das Problem bei der Lösung gegeben, wie durch OP angegeben ist, ist, dass die erste registrierte b Lueprint hat Priorität bei der Verwendung von url_for in Vorlagen.

Eine schnelle Abhilfe könnte so etwas wie dies tut bei der Registrierung:

app.register_blueprint(mod, subdomain='br') 
mod.name = 'landing_pt'  
app.register_blueprint(mod, subdomain='pt') 

Beachten Sie, dass die Reihenfolge dieses wichtigen erfolgt ist (erstes Register, dann den Namen ändern, dann die andere Register).

Dann wird für url_for wie bei den beiden Sub-Domains erwartet zu arbeiten, ist es wichtig, relative redirects wie url_for('.index') statt url_for('landing.index') zu verwenden.

Indem wir den Namen des Blueprints für die zweite Registrierung ändern, machen wir Flask zu der Annahme, dass es sich um einen anderen Blueprint handelt.

Vorschläge begrüßen diese Art von dreckigen Workaround besser.

+0

Dies wird eine große Anzahl von Problemen verursachen. Die Reihenfolge der Registrierung bricht alle Links aufgrund des Präfixes. Nehmen Sie immer die Verknüpfung mit dem Präfix der ersten registrierten Subdomain an. Ich werde eine Konfigurationsdatei pro VM verwenden und dieses Problem lösen. – anvd

+0

@andv Ich glaube ich verstehe, was dein Problem ist. Die erste registrierte Subdomain hat Priorität bei der Verwendung von url_for. Ich habe gerade die Antwort mit einer Problemumgehung für dieses Problem bearbeitet. Ich hoffe es hilft. – AArias

Verwandte Themen