簡體   English   中英

在Django中合並用戶創建的電子郵件模板中的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM