如何从数据库中将Jinja2模板加载到Environment的加载器中

时间:2017-12-05 19:15:29

标签: jinja2

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

1 个答案:

答案 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加载字典。

相关问题