Настройка пирамиды mako.imports не работает
Я пытаюсь использовать параметр mako.imports, чтобы избежать импорта модулей в каждом файле шаблона.
Первоначально у меня был блок уровня модуля в верхней части каждого шаблона, например:
<%!
import logging
%>
И я хотел бы заменить это настройкой в файле.ini:
mako.imports = 'import logging'
Это не работает, так как шаблон просто выбрасывает NameError: name 'logging' is not defined
когда я пытаюсь использовать это.
Похоже, что mako.imports даже не вызывается, так как параметр вроде:
mako.imports = 'import SpamAndEggs'
не выдает ошибку.
Я использую Pyramid 1.3 и Mako 0.7.0.
2 ответа
С опор-обсудить, синтаксис:
mako.imports =
import logging
import some.other.module
Импортировать операторы, разделенные переносами строк. Я думаю, что документы должны заявить об этом на примере, так как "список строк" для людей Python довольно отличается.
Спасибо Майку Мерикель.
Итак, глядя на сгенерированный Pyramid шаблонный код Mako, он буквально выводит то, что находится в этом параметре конфигурации, кавычки, скобки и все.
Итак, синтаксис должен быть:
mako.imports = import logging
с множественным импортом как:
mako.imports = import logging, some.other.module
и не любой из них:
mako.imports = 'import logging'
mako.imports = ['import logging', 'some.other.module']
mako.imports = import logging, import some.other.module
Последний бросает mako.exceptions.SyntaxException
поскольку он не является допустимым Python, но первые 2 не работают, ничего не делая, поскольку они просто выводят литерал в виде строки кода.
Я не сделал вывод об этом из документации, которая гласит "Строковый список операторов Python, как правило, отдельные строки" import "" (но, возможно, я просто не правильно понял это).
Спасибо Майку Байеру за его пост о Мако.