Использование глобальной переменной в шаблоне Pweave

#python #pweave

#python #pweave

Вопрос:

Просматривая здесь документацию по pweave, представляется возможным получить доступ к любым данным, сгенерированным внутри шаблона вызывающей программой, установив returnglobals переменную.

Возможно ли сделать наоборот? то есть, чтобы шаблон ссылался на глобальную переменную в вызывающем скрипте?

Мой вариант использования заключается в том, что я сначала извлекаю некоторые данные из базы данных SQL, а затем вызываю pweave.pweave() , используя эти данные для заполнения шаблона. В настоящее время я делаю это, записывая промежуточный файл, а затем загружая его в преамбулу шаблона. Вместо этого я хотел бы просто передать это как часть глобальной области видимости. Я пытался объявить переменную global в шаблоне, но, похоже, это не работает; я продолжаю получать исключения NameError .

Ответ №1:

Это можно сделать следующим образом:

В вызывающем скрипте :

 from pweave import Pweb
Pweb.globals = { "foo" : "bar" } # This creates a global var `foo` with value 'bar'
w = Pweb("inputfile.tex")        # Generate a Pweb class. We can't just call `pweave()`
w.weave()                        # Equivalent of `pweave()`
  

В шаблоне tex:

 The value of foo is <%=print(foo)%>
  

которая выведет «Значение foo равно bar».

Причина странного словаря в том, что код использует следующий вызов для оценки вашего кода:

 exec compiled in Pweb.globals
  

Дополнительную информацию вы можете получить в документации Python.