Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from textwrap import fill, dedent
- from django.template import Context
- from django.template.loader import get_template
- from django.template.loader_tags import BlockNode, ExtendsNode
- from post_office.mail import send
- def send_mail_from_file(recipients, name, context={}, **kwargs):
- subject, message, html_message = render_email(name, context)
- return send(recipients=recipients, subject=subject, html_message=html_message,
- message=message, template=None, context=None, **kwargs)
- # https://github.com/BradWhittington/django-templated-email/blob/master/templated_email/backends/vanilla_django.py
- def render_email(template_name, context={}, template_dir='mails/'):
- context = Context(context, autoescape=False)
- full_template_name = '%s%s.email' % (template_dir, template_name)
- template = get_template(full_template_name)
- subject = render_template_block(template, 'subject', context).strip()
- plain = render_template_block(template, 'plain', context).strip()
- html = render_template_block(template, 'html', context).strip()
- # strip leading whitespace
- plain = dedent(plain)
- # wrap lines individually
- new_plain = '\n'.join([fill(line) for line in plain.splitlines()])
- return subject, new_plain, html
- # https://github.com/uniphil/Django-Block-Render/blob/master/block_render.py
- class BlockNotFound(Exception):
- """The requested block did not exist."""
- pass
- def render_template_block(template, block, context):
- """
- Renders a single block from a template.
- This template should have previously been rendered.
- """
- template._render(context)
- return _render_template_block_nodelist(template.nodelist, block, context)
- def _render_template_block_nodelist(nodelist, block, context):
- for node in nodelist:
- if isinstance(node, BlockNode) and node.name == block:
- return node.render(context)
- for key in ('nodelist', 'nodelist_true', 'nodelist_false'):
- if hasattr(node, key):
- try:
- rendered = _render_template_block_nodelist(
- getattr(node, key), block, context)
- except:
- pass
- else:
- return rendered
- for node in nodelist:
- if isinstance(node, ExtendsNode):
- try:
- rendered = render_template_block(
- node.get_parent(context), block, context)
- except BlockNotFound:
- pass
- else:
- return rendered
- raise BlockNotFound
Advertisement
Add Comment
Please, Sign In to add comment