Использование глобальной переменной в шаблоне 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.

Другие вопросы по тегам