在djang中合并用户创建的电子邮件模板中的字段

2024-05-10 14:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我要让用户输入一个草稿文档,以便通过电子邮件确认预订应用程序。这个草稿可以是这样的:

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()

然后用户可以设计和测试自己的合并字段,并在电子邮件模板中使用它们。这将使它更容易维护。但是,我不知道如何解析这个公式字段。你知道吗

你知道怎么做吗?你知道吗


Tags: 对象字符串用户foryourreturnmodels电子邮件
1条回答
网友
1楼 · 发布于 2024-05-10 14:32:35

更好的解决方案是使用django模板系统。让用户以django模板格式输入消息,如: 亲爱的{{contactname}}, 这是您从{{startdate}}到{{enddate}}的假期的预订确认书,总共{numdays}}天。 请单击{{cancelink}}取消您的预订。你知道吗

然后使用get_template_from_stringfrom django.template.loader并获取模板实例。然后通过执行模板.render(context),其中context是在django.template.context中找到的Context实例。 您可以在https://docs.djangoproject.com/en/1.6/ref/templates/api/中阅读更多关于django模板api的信息,这里应该很简单。你知道吗

相关问题 更多 >