2012-06-25 8 views
7

Ich habe gelernt, Flask Blueprints zu erstellen und kann Blueprint für Nicht-Kolben-Produkte erstellen, die Jinja2-Vorlagen verwenden und sie in Flaschenprojekten verwenden. Ich mache so etwas wie dieses:Wie man von mehr als einem template_folder für Flask Blueprint lädt?

# blueprint code 
from flask import Blueprint 
from pkg_resources import resource_filename 
app = Blueprint('formgear', __name__, 
       template_folder=resource_filename('formgear', 'templates')) 

Und nun möchte ich eine weitere Reihe von Vorlagen hinzufügen, die logisch mit meinem nicht-Flask-Projekt verbunden ist, aber sind flaschen nur spezifisch. Ich bin mir überhaupt nicht sicher, ob es ein gutes Desing ist, aber gibt es eine Möglichkeit, beide Vorlagenordner aus einem Bauplan zu verbreiten? Und beide Vorlagen für das gesamte Flask-Projekt verfügbar machen?

Hinweis: formgear ist der Name meines Nicht-Flask-Projekts.

+1

Hat passieren kann meine Antwort Ihre Frage beantworten ? – pyfunc

Antwort

5

Hier ist die Spur der Untersuchungen.

Von flask.blueprints

class Blueprint(_PackageBoundObject): 
    .... 
    def __init__(self, name, import_name, static_folder=None, 
       static_url_path=None, template_folder=None, 
       ...) 
     _PackageBoundObject.__init__(self, import_name, template_folder) 
    .... 

Von flask.helpers

@locked_cached_property 
def jinja_loader(self): 
    """The Jinja loader for this package bound object. 

    .. versionadded:: 0.5 
    """ 
    if self.template_folder is not None: 
     return FileSystemLoader(os.path.join(self.root_path, 
              self.template_folder)) 

Investigation Ergebnis:

  1. template_folder, die an Blueprints geben wird anschließend in die Klasse _PackageBoundObject
  2. Es wird als eine Zeichenkette behandelt und nicht als eine Liste von Ordnern

Ergebnis:

  1. Sie nicht mehrere Pfade für template_folder