2014-03-05 11 views
5

Ich prüfe Flask mit Blaupausen. Meine app hat zwei Pläne:Flask: Mehrere Blueprints interferieren miteinander

  1. Basis
  2. Meinungen

base/__ init__.py

base = Blueprint('base', __name__, static_folder='static', template_folder='templates') 
#http://server.com/base 

Meinungen/__ init__.py

opinions = Blueprint('opinions', __name__, static_folder='static', template_folder='templates') 
#http://server.com/opinions 

__init__.py

app = Flask(__name__) 
from app.base import views 
from app.base import base 
app.register_blueprint(base, url_prefix='/base') 

from app.opinions import views 
from app.opinions import opinions 
#app.register_blueprint(opinions, url_prefix='/opinions') <-- Uncommenting this line causes issues 

Wenn ich nur 1 dieser Baupläne registriere, läuft alles gut. Wenn ich jedoch beide Blueprints registriere, werden Vorlagen immer von opinions geladen. Wenn ich zum Beispiel http://server.com/base drücke, wird die index.html aus dem Ordner "Meinungen" ausgewählt. Die Flask-Dokumentation erwähnt nichts über Namenskonflikte in 'template_folder'.

PS - Ich würde gerne alternative Möglichkeiten der Handhabung mehrerer Blaupausen kennen. Ich bin nicht sehr bequem, views Datei von zwei verschiedenen Blueprints zu importieren. Was ist der bessere Weg, dies zu tun?

+0

Bitte fügen Sie eine Beispielverwendung der Statik in Ihre Vorlage und die generierte HTML-Zeile ein. –

+0

@PaoloCasciello - Dein Kommentar hat sicher geholfen. Es waren nicht die statischen Dateien, sondern die falschen Vorlagen, die ausgewählt wurden. Ich habe die Frage entsprechend bearbeitet. – Neo

+0

möglich duplikat von [flask blueprint template ordner] (http://stackoverflow.com/questions/7974771/flask-blueprint-template-folder) – Neo

Antwort

5

Blueprint-Vorlagenverzeichnisse sind weltweit registriert. Sie teilen sich einen Namespace, sodass Ihre App bei Bedarf die Vorlage des Blueprints überschreiben kann. Dies wird in der Dokumentation kurz erwähnt.

Daher sollten Sie nicht Ihre Meinung Vorlage index.html, sondern opinions/index.html nennen. Das macht auf den ersten Blick unangenehme Pfade möglich (…/opinions/templates/opinions/…), bietet aber zusätzliche Flexibilität beim Anpassen von "vordefinierten" Vorlagen, ohne den Inhalt des Blueprints zu ändern.

+0

Ja, es ist eine bewusste Design-Wahl. http://stackoverflow.com/a/8198325/1678010 – Neo

Verwandte Themen