我有一個模塊可以通過使用Jinja2來呈現模板來處理創建和執行SQL查詢。模塊本身和名爲「模板」的目錄位於網絡驅動器上,我可以從網絡上的多臺機器訪問該驅動器。Jinja2從工作目錄之外的單獨位置加載模板
當我按照預期在同一個目錄中工作時,一切都正常。
當我嘗試從一個單獨的位置加載和使用此模塊時,出現TemplateNotFound:
錯誤。函數本身看起來像這樣,與包含錯誤的行強調:
from jinja2 import Environment, FileSystemLoader, Template, meta
def get_sql_query(position):
filename = "PositionDelta.sqltemplate"
# Create Jinja2 Environment, using the 'templates' folder
Error here --> env = Environment(loader=FileSystemLoader('templates'))
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
功能,它的搜索爲相對於工作文件夾的模板文件夾。我怎樣才能將它設置爲查找相對於模塊位置本身的模板目錄?
這不正是要解決的一對夫婦的原因問題: 1.我需要從Linux和Windows機器訪問模板目錄。我可以在這裏爲這兩種情況寫一個if語句。 2.我希望與同事分享模塊,以便他們/我想脫機工作並且無法訪問網絡。相反,我只是將所有模塊收集到一個包中,並使用jinja.PackageLoader() - 查看答案 – cbcoutinho