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.
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>
Licensing information is available on the about page, for additional questions or comments feel free to contact me.