Настройка пирамиды 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 "" (но, возможно, я просто не правильно понял это).

Спасибо Майку Байеру за его пост о Мако.

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