![](/img/trans.png)
[英]Django CustomUser created in Admin, User notification by email
[英]Merge fields in user created email templates in django
因此,我將讓用戶輸入文檔草稿,以進行預訂申請的電子郵件確認。 該草稿可能如下所示:
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>'
這種硬編碼的方法非常難看。 我更希望讓用戶提供一個我可以解析的字符串,並推斷出一些含義,例如對預訂對象的引用,一些算術和靜態字符串(例如在鏈接中)。 我想象一個像這樣的模型:
class MergeField(models.Model):
name = models.CharField(max_length=100)
formula = models.TextField()
然后,用戶可以設計和測試自己的合並字段,並在電子郵件模板中使用它們。 這將使其易於維護。 但是,我不知道如何解析此公式字段。
你有什么想法嗎?
更好的解決方案是使用django模板系統。 讓用戶以Django模板格式輸入消息,例如:尊敬的{{contactname}},這是您從{{startdate}}到{{enddate}}總共{{numdays}}天的假期預訂確認。 請點擊{{cancellink}}取消預訂。
然后使用django.template.loader
get_template_from_string
並獲取模板實例。 比起您可以通過執行template.render(context)來渲染模板,其中context是在django.template.context
找到的Context
實例。 您可以在https://docs.djangoproject.com/en/1.6/ref/templates/api/中閱讀有關django模板api的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.