2009-11-11 10 views
0

Я создаю библиотеку, которая будет использоваться в нескольких приложениях Python. Он получает многоязычные шаблоны электронной почты из RMDBS, а затем замена переменной будет выполняться в шаблоне на Python до отправки электронной почты.Неверные шаблоны в Python - что такое безопасная библиотека для использования?

В дополнение к замене переменных мне нужна библиотека шаблонов для поддержки if, elif и для операторов в шаблонах.

Я использую Mako для большинства своих проектов, а также посмотрел на Tempita, поскольку он не предоставляет много функций, которые мне не нужны.

У меня есть проблема с ненадежным исполнением кода. Может ли кто-нибудь указать мне на решение шаблона для Python, которое либо не поддерживает выполнение кода, либо разрешит мне его отключить?

+0

Возможно, я должен покончить с требованиями if/elif/for и просто использовать string.Template. Это было бы быстро, не требовать дополнительных библиотек и соответствовать моим требованиям безопасности. – Tony

+1

Возможно, вы могли бы написать очень тонкую обертку вокруг string.Template, чтобы разрешить условные утверждения? – Ravi

+0

Что я решил сделать, так это создать функцию mapper() для привязки объекта к объекту MailTemplate. Когда вызывается mapper, я определяю, какие свойства объекта могут использоваться на этапе замены переменных во время компиляции шаблона. Таким образом, если мне нужна условная или циклическая логика, я просто использую @property def в моем объекте, а затем могу использовать строку, возвращаемую из этого свойства def, и вставить его в шаблон. – Tony

ответ

4

Из Django book:

По этой причине, это нельзя назвать код Python непосредственно в шаблонах Django. Все «программирование» в корне ограничивается объемом тегов шаблонов. Можно писать собственные теги шаблонов, которые выполняют произвольные действия, но яркие шаблоны шаблонов Django преднамеренно не допускают выполнения произвольного кода на Python.

Дайте Django templates. Немного сложно настроить вне приложения Django - что-то делать с DJANGO_SETTINGS_MODULE, искать вокруг - но может быть доверено.

+0

Спасибо, что соответствует моим требованиям по отключению выполнения кода. Тем не менее, я стараюсь, чтобы эта библиотека была простой, и я боюсь, что некоторые библиотеки, предназначенные для Django, будут противоречить этому. – Tony

3

Вы проверили Jinja2? Это в значительной степени то, о чем вы говорите, и это отличное сочетание мощностей, сохраняя при этом все просто и не давая дизайнеру слишком много. :)

Если вы использовали систему шаблонов Django, это очень похоже (если не основано?) Jinja.

+1

Синтаксис Jinja на самом деле основан на шаблонах Django, а не наоборот. –

+0

Полезно знать, спасибо! – Bartek

Смежные вопросы