Comments (3)
For anyone who wants to try this now, I've copied the template tag from this library and copied it into my own project. There's not much to it when you don't have to talk to a separate process:
In templatetags/mjml.py
:
from django import template
from mjml import mjml2html
register = template.Library()
class MJMLRenderNode(template.Node):
def __init__(self, nodelist):
self.nodelist = nodelist
def render(self, context) -> str:
mjml_source = self.nodelist.render(context)
return mjml_render(mjml_source)
@register.tag
def mjml(parser, token) -> MJMLRenderNode:
"""
Compile MJML template after render django template.
Usage:
{% mjml %}
.. MJML template code ..
{% endmjml %}
"""
nodelist = parser.parse(("endmjml",))
parser.delete_first_token()
tokens = token.split_contents()
if len(tokens) != 1:
raise template.TemplateSyntaxError("'%r' tag doesn't receive any arguments." % tokens[0])
return MJMLRenderNode(nodelist)
def mjml_render(mjml_source: str) -> str:
return mjml2html(mjml_source)
from django-mjml.
@blopker I think you can use mjml-python
to create a HTTP or a TCP server and use a proper config to use that. It's better to use external service for rendering emails especially if you send a lot of emails.
But your idea is a good way to use mjml easier for smaller projects. I'm thinking about supporting customizable classes to make supporting alternative mjml-backends more flexible and allow developers use custom backends without making changes in django-mjml
.
from django-mjml.
Tried @blopker version. Works well so far, and about 100x faster than cmd implementation of django-mjml.
0.006 seconds per render vs 0.9 seconds
from django-mjml.
Related Issues (20)
- Add support for Django 3.1 HOT 1
- MJML tags not being recognized HOT 3
- How to use with blocks? HOT 1
- MJML compiler in TCP mode failing in CI on bitbucket HOT 10
- Custom backend feature HOT 6
- Add support for django 3.2 HOT 7
- Mock httpserver HOT 2
- MJML compile error (via MJML TCP server): no working server HOT 6
- Update to support Django 4.0 HOT 4
- Setting necessary for allowing custom authentication/transport for http backend HOT 5
- Does mjml support blocks in templates ? HOT 1
- Possibility to render *.mjml templates to *.html templates HOT 1
- tcpserver.js removed in 1.0 release but is still in docs HOT 2
- Support django 4.2 HOT 1
- django.core.exceptions.ImproperlyConfigured: Problem to run command "mjml -i -s" HOT 1
- Support django 5.0 HOT 1
- Message in stderr is breaking django-mjml HOT 7
- mj-include doesn't work HOT 1
- Getting timeouts since 0.8.0 HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-mjml.