2012-06-25 18 views
7

Aprendí cómo crear Flask Blueprints y puedo crear blueprint para productos que no sean matraces que usan plantillas Jinja2 y usarlos dentro de proyectos de matraces. Hago algo como esto:Cómo cargar desde más de una template_folder para Flask blueprint?

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

Y ahora quiero añadir otro conjunto de plantillas, que está lógicamente conectada con mi proyecto, pero no son Frasco Frasco de sólo específico. No estoy del todo seguro de si es bueno diseño, pero ¿hay alguna manera de propagar ambas carpetas de plantillas desde un modelo? ¿Y hacer que ambas plantillas estén disponibles para todo el proyecto de Flask?

Nota: formgear es el nombre de mi proyecto no frasco.

+1

¿Mi respuesta responder a su pregunta ? – pyfunc

Respuesta

5

Aquí está el camino de las investigaciones.

De 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) 
    .... 

De 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)) 

Investigación Resultado:

  1. template_folder que se pasa a Blueprints es posteriormente a la clase _PackageBoundObject
  2. Se trata como una sola cadena y no como una lista de carpetas

Resultado:

  1. No se puede pasar varias rutas para template_folder
Cuestiones relacionadas