Скрытие деталей реализации в системе шаблонов электронной почты, написанной на Python

StackOverflow https://stackoverflow.com/questions/405509

Вопрос

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

Помимо форматирования, пользователь должен иметь возможность использовать заполнители для нескольких переменных, которые будут заменены во время выполнения.

То, как это работает в настоящее время, очень просто:в шаблонах есть заполнители Pythonic %(var)s, и я заменяю их словарем перед применением форматирования Markdown2.

Оказывается, конечным пользователем этой системы будет технически подкованный пользователь, и мне не хотелось бы, чтобы всем было очевидно, что она написана на Python.

Дело не в том, что я не люблю Python...На самом деле я считаю, что Python — идеальный инструмент для этой работы, я просто не хочу раскрывать его пользователю (хотелось бы того же, даже если бы он был написан на Java, Perl, Ruby или чем-то еще).

Поэтому я хотел бы узнать, какой, по вашему мнению, лучший способ предоставить пользователям заполнители:

  1. Как вы думаете, какой формат заполнителя лучше всего (например, ${var}, $(var) или #{var})?

  2. Каким будет лучший способ заменить эти заполнители?

Хотя я использовал регулярное выражение, чтобы изменить, например, ${var} на %(var)s, а затем применить обычную замену шаблонов Python, но я не уверен, что это лучший подход.

Если вы пойдете по этому пути, было бы очень хорошо, если бы вы также указали мне, что представляет собой черновик этого регулярного выражения.

Спасибо!

Обновлять:Пользователь указал на использование полноценных систем шаблонов, но я думаю, что это того не стоит, поскольку все, что мне нужно, это замена заполнителей:У меня не будет петель или чего-то в этом роде.

Последнее обновление:В настоящее время я решил не использовать какие-либо шаблонизаторы.Я решил использовать более простой подход string.Template (как указано в комментарии гиперборейский).Правда в том, что мне не нравится выбирать решение, потому что когда-нибудь в будущем может возникнуть необходимость.Я сохраню все эти предложения при себе, и если в течение срока службы приложения возникнет явная потребность в одной или нескольких предлагаемых ими функциях, я вернусь к этой идее.Сейчас я действительно думаю, что это перебор.Наличие полноценных шаблонов, которые конечный пользователь может редактировать так, как хочет, это, по крайней мере, с моей точки зрения, больше хлопот, чем пользы.Тем не менее, гораздо приятнее осознавать причины, по которым я не пошел по этому пути, чем просто ничего не исследовать и не выбирать.

Большое спасибо за весь вклад.

Это было полезно?

Решение

Используйте настоящий инструмент шаблона: мако или Джинджа.Не сворачивайте свои собственные.Не стоит.

Другие советы

Иметь систему легких шаблонов...Я не уверен, сможете ли вы использовать некоторые из тех, которые предоставляет TurboGears (Kid или Genshi).

Я бы посоветовал Джинджа2.

Это не должно создавать проблем с производительностью во время выполнения, поскольку шаблоны компилируются в Python.Это обеспечит гораздо большую гибкость.Что касается ремонтопригодность;это во многом зависит от программиста, но теоретически (и, надо признать, поверхностно) я не понимаю, почему его должно быть сложнее поддерживать.

Приложив немного больше усилий, вы сможете дать своему технически подкованному пользователю возможность самостоятельно определять стиль замены.Или выберите один из значений по умолчанию, которые вы предоставляете.

Вы можете попробовать новый метод str.format() в Python 2.6/3.0: http://docs.python.org/library/string.html#formatstrings

Это немного отличается от %-форматирования и может быть не так легко узнаваемо, как Python:

'fish{chips}'.format(chips= 'x')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top