Use MJML in Django templates
Project description
django-mjml
The simplest way to use MJML in Django templates.
Installation
Requirements:
Django from 1.8 to 3.0
requests from 2.19.0 (only if you are going to use API HTTP-server for rendering)
mjml from 2.3 to 4.5.1
1. Install mjml.
See https://github.com/mjmlio/mjml#installation and https://mjml.io/documentation/#installation
2. Install django-mjml.
$ pip install django-mjml
To install development version use git+https://github.com/liminspace/django-mjml.git@develop instead django-mjml.
If you want to use API HTTP-server, install requests:
$ pip install requests
3. Set up settings.py in your django project.
INSTALLED_APPS = ( ..., 'mjml', )
Usage
Load mjml in your django template and use mjml tag that will compile MJML to HTML:
{% load mjml %} {% mjml %} <mjml> <mj-body> <mj-container> <mj-section> <mj-column> <mj-text>Hello world!</mj-text> </mj-column> </mj-section> </mj-container> </mj-body> </mjml> {% endmjml %}
Advanced settings
There are two backend modes for compiling: cmd, tcpserver and httpserver.
cmd mode
This mode is very simple, slow and used by default.
MJML_BACKEND_MODE = 'cmd' MJML_EXEC_CMD = 'mjml'
You can change MJML_EXEC_CMD and set path to executable mjml file, for example:
MJML_EXEC_CMD = '/home/user/node_modules/.bin/mjml'
Also you can pass addition cmd arguments, for example:
MJML_EXEC_CMD = ['node_modules/.bin/mjml', '--config.minify', 'true', '--config.validationLevel', 'strict']
Once you have a working installation, you can skip the sanity check on startup to speed things up:
MJML_CHECK_CMD_ON_STARTUP = False
tcpserver mode
This mode is faster than cmd but it needs run a separated server process which will render templates.
MJML_BACKEND_MODE = 'tcpserver' MJML_TCPSERVERS = [ ('127.0.0.1', 28101), # host and port ]
You can set several servers and a random one will be used:
MJML_TCPSERVERS = [ ('127.0.0.1', 28101), ('127.0.0.1', 28102), ('127.0.0.1', 28103), ]
You can run servers by commands:
# NODE_PATH=/home/user/node_modules node /home/user/.virtualenv/default/lib/python2.7/site-packages/mjml/node/tcpserver.js --port=28101 --host=127.0.0.1 --touchstop=/tmp/mjmltcpserver.stop
28101 - port, 127.0.0.1 - host, /tmp/mjmltcpserver.stop - file that will stop server after touch.
For daemonize server process you can use, for example, supervisor:
/etc/supervisor/conf.d/mjml.conf [program:mjmltcpserver] user=user environment=NODE_PATH=/home/user/node_modules command=node /home/user/.virtualenv/default/lib/python2.7/site-packages/mjml/node/tcpserver.js --port=28101 --host=127.0.0.1 --touchstop=/tmp/mjmltcpserver.stop --mjml.minify=true --mjml.validationLevel=strict stdout_logfile=/home/user/project/var/log/supervisor/mjml.log autostart=true autorestart=true redirect_stderr=true stopwaitsecs=10 stopsignal=INT
Or you can use docker-compose:
services: mjml-1: image: liminspace/mjml-tcpserver:latest restart: always ports: - "28101:28101" mjml-2: image: liminspace/mjml-tcpserver:latest restart: always environment: HOST: "0.0.0.0" PORT: "28102" MJML_ARGS: "--mjml.minify=true --mjml.validationLevel=strict" expose: - "28102" ports: - "28102:28102"
httpserver mode
don’t forget to install requests to use this mode.
This mode is faster than cmd and similar to tcpserver but you can use official MJML API https://mjml.io/api or run your own HTTP-server (for example https://github.com/danihodovic/mjml-server) to render templates.
MJML_BACKEND_MODE = 'httpserver' MJML_HTTPSERVERS = [ { 'URL': 'https://api.mjml.io/v1/render', # official MJML API 'HTTP_AUTH': ('<Application ID>', '<Secret Key>'), }, { 'URL': 'http://127.0.0.1:38101/v1/render', # your own HTTP-server }, ]
You can set one or more servers and a random one will be used.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_mjml-0.9.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1728a09af91bad07eb2fb9adb7d7f553994150dd0481a13eb830f51e365045d |
|
MD5 | 1d3687da1e9a213c0517643175fc1a87 |
|
BLAKE2b-256 | 2bf692c3e0d1736db1ba4856b723032b3cff514914a3d52c4040fe81f5a70a27 |