Jinja2 Markdown Extension
Below is an example of a Markdown extension for Jinja2.
import jinja2
import jinja2.ext
import markdown2
class Markdown2Extension(jinja2.ext.Extension):
tags = set(['markdown2'])
def __init__(self, environment):
super(Markdown2Extension, self).__init__(environment)
environment.extend(
markdowner=markdown2.Markdown()
)
def parse(self, parser):
lineno = parser.stream.next().lineno
body = parser.parse_statements(
['name:endmarkdown2'],
drop_needle=True
)
return jinja2.nodes.CallBlock(
self.call_method('_markdown_support'),
[],
[],
body
).set_lineno(lineno)
def _markdown_support(self, caller):
return self.environment.markdowner.convert(caller()).strip()
env = jinja2.Environment(extensions=[Markdown2Extension])
text = """
{% markdown2 %}
Hello World
===========
1. One
2. {{ two }}
3. Three
{% endmarkdown2 %}
"""
html = env.from_string(text).render(two='Two')
print html
Which would result in the following output:
<h1>Hello World</h1>
<ol>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ol>