从Wagtail创建和发送电子邮件活动
wagtail-birdsong的Python项目详细描述
一个wagtail插件,允许你在wagtail中创建、发送、预览、编辑和测试电子邮件活动。 使用mjml创建活动模板。在
基本用途
安装鸟鸣:
pip install wagtail-birdsong
将以下内容添加到已安装的应用程序中:
^{pr2}$制作一个新的应用程序,例如email,创建一个models.py,该模型扩展了包含的Campaign模型。为了方便起见,birdsong中包含了一些兼容的mjml streamfield块。在
frombirdsong.blocksimportDefaultBlocksfrombirdsong.modelsimportCampaignfromdjango.dbimportmodelsfromwagtail.admin.edit_handlersimportStreamFieldPanelfromwagtail.core.fieldsimportStreamFieldclassSaleEmail(Campaign):body=StreamField(DefaultBlocks())panels=Campaign.panels+[StreamFieldPanel('body'),]
然后在同一个应用程序中,创建一个wagtail_hooks.py,如果它不存在,这就是创建管理员的地方 内容编辑器可以创建/编辑/发送活动。在
CampaignAdmin只是Wagtail的ModelAdmin类的一个扩展,因此大多数相同的选项都可以用于重写功能。在
fromwagtail.contrib.modeladmin.optionsimportmodeladmin_registerfrombirdsong.optionsimportCampaignAdminfrom.modelsimportSaleEmail@modeladmin_registerclassSaleEmailAdmin(CampaignAdmin):campaign=SaleEmailmenu_label='Sale Email'menu_icon='mail'menu_order=200
在{app_folder}/templates/mail/{model_name}.html中创建您的活动模板,例如email/templates/mail/sale_email.html, 或者重写活动模型上的get_template方法。在
营销活动模板使用django-mjml编写响应迅速、设计良好的电子邮件。要了解如何设置django-mjml,可以阅读文档here。Birdsong中包含一个可以扩展的基本模板。在
sale_email.html
{% extends "birdsong/mail/base_email.html" %} {% block email_body %} <mj-section><mj-column><mj-text>Hello {{ contact.email }}!</mj-text> {% for b in self.body %} {{ b }} {% endfor %} </mj-column></mj-section> {% endblock email_body %}
你现在可以走了!在
自定义联系人模型
默认情况下,每个活动都使用包含的Contact模型,但您可能希望存储额外的数据,如名称和首选项。 您可以通过在“管理”上为您的活动设置一个选项来覆盖默认的Contact模型:
models.py
frombirdsong.modelsimportContactfromdjango.dbimportmodelsclassExtendedContact(Contact):first_name=models.CharField(max_length=255)last_name=models.CharField(max_length=255)location=models.CharField(max_length=255)
wagtail_hooks.py
fromwagtail.contrib.modeladmin.optionsimportModelAdmin,modeladmin_registerfrombirdsong.optionsimportCampaignAdminfrom.modelsimportExtendedContact,SaleEmail@modeladmin_registerclassSaleEmailAdmin(CampaignAdmin):campaign=SaleEmailmenu_label='Sale Email'menu_icon='mail'menu_order=200contact_class=ExtendedContact# You may want to add your own modeladmin here to list/edit/add contacts@modeladmin_registerclassContactAdmin(ModelAdmin):model=ExtendedContactmenu_label='Contacts'menu_icon='user'list_diplay=('email','first_name','last_name','location')
过滤联系人属性
您可能只想将活动发送到您的Contact模型的一个子集。使用django-filter创建筛选器并将其添加到CampaignAdmin中,用户可以对任何属性进行筛选。在
filters.py
fromdjango_filtersimportFilterSetfromdjango_filters.filtersimportAllValuesFilterfrom.modelsimportExtendedContactclassContactFilter(FilterSet):location=AllValuesFilter()classMeta:model=ExtendedContactfields=('location',)
wagtail_hooks.py
fromwagtail.contrib.modeladmin.optionsimportmodeladmin_registerfrombirdsong.optionsimportCampaignAdminfrom.filtersimportContactFilterfrom.modelsimportExtendedContact,SaleEmail@modeladmin_registerclassSaleEmailAdmin(CampaignAdmin):campaign=SaleEmailmenu_label='Sale Email'menu_icon='mail'menu_order=200contact_class=ExtendedContactcontact_filter_class=ContactFilter
用户现在可以根据位置向联系人的子集发送活动。在
取消订阅url
birdsong是联系人退订的基本方式,只需包含url配置并将退订url添加到您的电子邮件模板中。在
urls.py
frombirdsongimporturlsasbirdsong_urlsfromdjango.urlsimportinclude,pathurlpatterns=[...path('mail/',include(birdsong_urls)),...]
sale_email.html
{% extends "birdsong/mail/base_email.html" %} {% block email_body %} <mj-section><mj-column><mj-text>Hello {{ contact.email }}!</mj-text> {% for b in self.body %} {{ b }} {% endfor %} </mj-column></mj-section><mj-section> Click <ahref="{{ site.full_url }}{% url 'birdsong:unsubscribe' contact.id %}">here</a> to unsubscribe. </mj-section> {% endblock email_body %}
未来功能:
- 更多测试!在
- 适当的文件
- 后端发送电子邮件的SMTP以外的邮件,以便收集分析(电子邮件打开、退回等)
- 编辑时重新加载预览
- 更广泛的活动权限(发送、预览、测试发送)
- 项目
标签: