隐藏用Python编写的电子邮件模板系统的实现细节

时间:2009-01-01 21:34:27

标签: python email formatting templates

我正在编写一个应用程序,其中一个功能是允许用户使用Markdown语法编写电子邮件模板。

除了格式化之外,用户必须能够使用占位符来处理在运行时被替换的几个变量。

目前的工作方式非常简单:模板具有Pythonic%(var)的占位符,并且在应用Markdown2格式之前用字典替换它们。

事实证明,这个系统的最终用户将是一个精通技术的用户,我不想让每个人都明白它是用Python编写的。

这并不是说我不喜欢Python ......我实际上认为Python是完成这项工作的完美工具,我只是不想向用户公开它(即使是用它写的也是如此) Java,Perl,Ruby或其他任何东西)。

因此,我想问一下您认为哪些内容可以为用户提供占位符的最佳方式:

  1. 您认为最佳占位符格式是什么(如$ {var},$(var)或#{var})?

  2. 替换这些占位符的最佳方法是什么?

  3. 我使用正则表达式来改变 - 例如 - $ {var}到%(var)s然后应用常规的Python模板替换,但我不确定这是最好的方法。

    如果你这样做,如果你能指出我那个正则表达式的草稿,那将是非常好的。

    谢谢!

    更新:用户指出使用完整的模板系统,但我认为这可能不值得,因为我需要的是占位符替换:我不会有循环或类似的东西这一点。

    最终更新:我此时选择不使用任何模板引擎。我选择使用更简单的string.Template方法(正如hyperboreean的评论所指出的那样)。事实是,我不喜欢选择解决方案,因为将来某个时候可能需要解决方案。我将把所有这些建议保留在我的袖子上,如果在应用程序的生命周期中明确需要它们提供的一个或多个功能,我将重新审视这个想法。现在,我真的觉得这太过分了。拥有完整的模板最终用户可以根据需要进行编辑,至少在我看来,更多的麻烦而不是受益。尽管如此,感觉更好的是我没有意识到我没有沿着这条道路前进的原因,而只是没有研究任何东西并选择它。

    非常感谢所有的输入。

4 个答案:

答案 0 :(得分:6)

使用真实的模板工具:makojinja。不要自己动手。不值得。

答案 1 :(得分:2)

有一个明亮的模板系统......我不确定你是否可以使用TurboGears提供的一些(Kid或Genshi)

答案 2 :(得分:1)

我建议jinja2

它不应该创建运行时性能问题,因为它将模板编译为python。它将提供更大的灵活性。至于可维护性;它在很大程度上取决于编码器,但从理论上来说(并且表面上看)我不明白为什么它应该更难维护。

通过更多的工作,您可以让精通技术的用户自己定义替换风格。或者从您提供的默认值中选择一个。

答案 3 :(得分:0)

您可以尝试使用Python 2.6 / 3.0的新str.format()方法:http://docs.python.org/library/string.html#formatstrings

这与%-formatting略有不同,可能不像Python那样容易识别:

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