Использование глобальной переменной в шаблоне 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()`
В текстовом шаблоне:
The value of foo is <%=print(foo)%>
который напечатает "Значение foo является бар".
Причина странного словаря в том, что код использует следующий вызов для оценки вашего кода:
exec compiled in Pweb.globals
Вы можете получить больше информации в документации по Python.