FileSystemLoader从目录加载模板,无论如何,我可以将数据库中的模板作为字符串拉到loader中吗?
env = Environment(
#loader=FileSystemLoader(templates),
loader = Filedb('template.j2') # fetch from db ?
undefined=StrictUndefined # Force variable to be defined
)
env.filters['custom_filter'] = func
t = env.get_template("template.j2")
如果要创建自己的加载器,请子类BaseLoader并覆盖get_source。
例如:
class DatabaseLoader(BaseLoader):
def __init__(self, database_credentials):
self.database_credentials = database_credentials
def get_source(self, environment, template):
# Load from database... an exercise for the reader.
因为模板可以依赖于其他模板,所以加载一个模板可能需要多个数据库查找。使用bytecode caching缓存已编译的模板可以最大程度地减少数据库查找。
也可以将所有模板从数据库加载到字典中,然后使用Jinja的DictLoader加载字典。