所以我要让用户输入一个草稿文档,以便通过电子邮件确认预订应用程序。这个草稿可以是这样的:
Dear [contactname],
This is your booking confirmation for your vacation from [startdate] to [enddate] for a total of [numdays] days.
Please click [cancellink] to cancel your booking.
电子邮件只对预订对象有意义。目前,我有一个方法,它接受一个预订对象和一个合并字符串,并决定执行以下操作:
def merge_field(booking, ms):
if ms == 'contactname':
return booking.contactsheet.name
elif ms == 'startdate':
return str(booking.firstday)
elif ms == 'enddate':
return str(booking.lastday)
elif ms == 'numdays':
return str((booking.firstday - booking.lastday).days + 1)
elif ms == 'cancellink':
return '<a href="http://server.com/cancelbooking/' + str(booking.hashvalue) + '">cancel</a>'
这种硬编码的方法相当难看。我更愿意让用户提供一个字符串,我可以解析和推断一些含义,比如对booking对象的引用,一些算术和静态字符串(比如在链接中)。我想象这样一个模型:
class MergeField(models.Model):
name = models.CharField(max_length=100)
formula = models.TextField()
然后用户可以设计和测试自己的合并字段,并在电子邮件模板中使用它们。这将使它更容易维护。但是,我不知道如何解析这个公式字段。你知道吗
你知道怎么做吗?你知道吗
更好的解决方案是使用django模板系统。让用户以django模板格式输入消息,如: 亲爱的{{contactname}}, 这是您从{{startdate}}到{{enddate}}的假期的预订确认书,总共{numdays}}天。 请单击{{cancelink}}取消您的预订。你知道吗
然后使用
get_template_from_string
fromdjango.template.loader
并获取模板实例。然后通过执行模板.render(context),其中context是在django.template.context
中找到的Context
实例。 您可以在https://docs.djangoproject.com/en/1.6/ref/templates/api/中阅读更多关于django模板api的信息,这里应该很简单。你知道吗相关问题 更多 >
编程相关推荐