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

问题描述 投票:1回答:1

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")
jinja2
1个回答
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加载字典。

© www.soinside.com 2019 - 2024. All rights reserved.