Как получить рабочий каталог загрузчика jinja2?

#python-3.x #jinja2 #airflow

#python-3.x #jinja2 #воздушный поток

Вопрос:

Я пытаюсь создать рабочий процесс airflow, который генерирует html-отчеты с использованием jinja2 с помощью airflow. Шаблон находится под ./dags/report_generator/template.html .

Я пытаюсь загрузить его ./dags/report_generator/generator.py таким образом:

 loader = FileSystemLoader("/dags/report_generator")
env = Environment(loader=loader)
template = env.get_template("template.html")
  

Это завершается ошибкой со следующей ошибкой:

     template = env.get_template("report.html")
  File "/usr/local/lib/python3.7/site-packages/jinja2/environment.py", line 830, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/usr/local/lib/python3.7/site-packages/jinja2/environment.py", line 804, in _load_template
    template = self.loader.load(self, name, globals)
  File "/usr/local/lib/python3.7/site-packages/jinja2/loaders.py", line 113, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/usr/local/lib/python3.7/site-packages/jinja2/loaders.py", line 187, in get_source
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: template.html
  

Я пробовал различные комбинации пути, loader а также get_template кода. У меня такое чувство, что загрузчик указывает куда-то еще, чем я думаю.

Есть ли способ запустить «печать рабочего каталога», на который указывает загрузчик?

Спасибо

Ответ №1:

Раньше я делал что-то вроде:

 init_env = Environment(auto_reload=False)
path = os.path.join(os.path.dirname(__file__), '../', 'templates', templates_sub_dir)
init_env.loader = FileSystemLoader(path)
  

Где templates находится в корневом каталоге вашего проекта.

Комментарии:

1. Спасибо за ответ, я попробовал это без успеха

Ответ №2:

Столкнулся с этой проблемой и только что нашел довольно надежный обходной путь. После создания Environment попробуйте вызвать

env.loader.list_templates()

Здесь должны быть перечислены все шаблоны, найденные FileSystemLoader , а список файлов должен дать вам хорошее представление о том, где находится «рабочий каталог».