django-html-emailtemplates

A simple Django app to create and send editable emails.


License
BSD-3-Clause
Install
pip install django-html-emailtemplates==0.0.2

Documentation

Django HTML Email Templates

A Django app for allowing users to create html emails using Django template variables passed in to the context.

Installation

Use the package manager pip to install django-html-emailtemplates.

pip install django-html-emailtemplates

Add the package to your INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'emailtemplates',
    ...
]

Usage

# models.py
from emailtemplates.fields import EmailTemplateField
class Settings(models.Model):
    contact_form_reply = EmailTemplateField(
        models.SET_NULL,
        null=True,
        email_context="""
        You can use the following variables in the template:
        {{ name }}
        {{ subject_matter }}
        {% for item in items %}
            Possible values are:
            {{ item.title }}
            {{ item.cost }}
            {{ item.description }}
        {% endfor %}
        """
    )

# views.py
from emailtemplates.utils import send_email_template
from emailtemplates.models import EmailTemplate
from .models import Settings

# view definition
def form_valid(self, form):
    enquiry = form.save()
    # send reply email to website user
    send_email_template(
        Settings.objects.first().contact_form_reply,
        [enquiry.email],
        {
            'name': enquiry.name,
            'subject_matter': enquiry.subject,
            'items': [
                {
                    'title': 'Product',
                    'cost': '£20.00',
                    'description': 'Product description...'
                }
            ]
        }
    )
    # send notification to website owner
    send_email_template(
        EmailTemplate(
            subject='Enquiry from example.com',
            content='''<div>
                <p>There was an enquiry on your website, the details are below:</p>
                <table>
                    <tbody>
                        <tr>
                            <td>Name:</td>
                            <td>{{ enquiry.name }}</td>
                        </tr>
                    </tbody>
                </table>
            </div>'''
        ),
        ['contact@example.com'],
        {
            'enquiry': enquiry
        }
    )

alt text

Features to add

  • Add base email header/footer
  • Add plugins for images/documents
  • Add better html field
  • Add support for Wagtail StreamField