FileSystemLoader从目录加载模板,无论如何我可以将模板从数据库中作为字符串拉入加载器吗?
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")
答案 0 :(得分:0)
来自Jinja docs:
如果要创建自己的加载器,请子类 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加载字典。