#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.