Usage¶
HTML¶
Load the template tags.
{% load markdowny_tags %}
Use the {% markdowny %} template tag to convert Markdown into HTML.
{% markdowny %}Hello, world!{% endmarkdowny %}
Or use it as a template filter.
{{ post.body|markdowny }}
Result:
<p>Hello, world!</p>
Customize with keyword arguments¶
Additionally customize the behavior of the {% markdowny %} tag with keyword arguments that correspond to those of Python-Markdown’s Markdown method.
{% markdowny output_format='xhtml' tab_length=2 %}Hello, world!{% endmarkdowny %}
At the time of this writing, arguments include:
extensionsextension_configsoutput_formattab_length
Django’s template language cannot interpret native Python code. However, keyword arguments in template tags can declaratively accept strings and numbers; that is, when specifying output_format and/or tab_length, their values–‘xhtml’ and 2 in the prior example, respectively–can be assigned upon declaration. The other keyword arguments–extensions and extension_configs–cannot accept a declarative assignment because Markdown expects a native Python list and dictionary, respectively.
Therefore, if specifying extensions and/or extension_configs in the template tag, their values should be made available by the template context. For example, if one wanted extensions declared in the template tag and my_extensions existed in the template context:
{% markdowny extensions=my_extensions %}Hello, world!{% endmarkdowny %}
The view (or middleware, context processor, etc.) should then make my_extensions available.
from django.shortcuts import render
def my_view(request):
return render(request, 'my_template.html', context={
'my_extensions': ['abbr'],
})
Likewise for extension_configs and its expectation of a dictionary. Like extensions and extension_configs, the output_format and tab_length keyword arguments can also accept template variables as their values should you choose.
{% markdowny output_format=my_output_format tab_length=my_tab_length %}Hello, world!{% endmarkdowny %}
If a required template variable does not exist in the context, then its value from the project’s settings will be used, falling back to the default app Settings as a last resort.
Warning
Previous versions of the template tag expected keyword arguments as strings mimicking the appearance of native Python types; e.g., {% markdowny extensions='["abbr"]' %}Hello, world!{% endmarkdowny %}. This is always a bad idea, and the behavior has since been removed.