Скрытие деталей реализации в системе шаблонов писем, написанной на Python - PullRequest
0 голосов
/ 02 января 2009

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

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

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

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

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

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

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

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

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

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

Спасибо!

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

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

Большое спасибо за все вводимые данные.

Ответы [ 4 ]

6 голосов
/ 02 января 2009

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

2 голосов
/ 02 января 2009

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

1 голос
/ 02 января 2009

Я бы порекомендовал jinja2 .

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

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

0 голосов
/ 02 января 2009

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

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

'fish{chips}'.format(chips= 'x')
...