gpt4 book ai didi

Jinja2 从与工作目录不同的位置加载模板

转载 作者:行者123 更新时间:2023-12-04 18:32:41 26 4
gpt4 key购买 nike

我有一个模块,通过使用 Jinja2 呈现模板来处理创建和执行 SQL 查询。模块本身和一个名为"template"的目录位于网络驱动器上,我可以从网络上的多台机器访问该驱动器。

正如预期的那样,当我在同一目录中工作时,一切正常。

当我尝试从一个单独的位置加载和使用这个模块时,我得到一个 TemplateNotFound:错误。函数本身看起来像这样,包含错误的行突出显示:

from jinja2 import Environment, FileSystemLoader, Template, meta

def get_sql_query(position):
filename = "PositionDelta.sqltemplate"

# Create Jinja2 Environment, using the 'templates' folder
env = Environment(loader=FileSystemLoader('templates')) # Error!
template = env.get_template(filename)

# Get source of template file
template_source = env.loader.get_source(env, filename)[0]

# Parse template source and get all undeclared variables
parsed_content = env.parse(template_source)
template_variables = list(meta.find_undeclared_variables(parsed_content))

# Get all tag values associated with position
tag_values = get_tags_list(position)

# Combine template variables and tag values into dictionary and render sql query from template
dictionary = dict(zip(template_variables, tag_values))
sql_query = template.render(dictionary)

return sql_query

这个失败的函数是以下行:
env = Environment(loader=FileSystemLoader('templates'))

我想当我调用 FileSystemLoader 时函数,它正在搜索相对于工作文件夹的模板文件夹。如何设置它以查找相对于模块位置本身的模板目录?

最佳答案

这对我有用:

from jinja2 import Environment, FileSystemLoader
template_dir = '/home/colin/template_dir'
env = Environment(loader=FileSystemLoader(template_dir))

我的猜测是,由于您的路径不是以正斜杠开头,因此它的加载相对于您的应用程序。尝试使用模板目录的完整路径。

关于Jinja2 从与工作目录不同的位置加载模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com