Search code examples
djangomarkdownmarkupdeprecated

Troubleshooting error when using markdown filter in Django template


When using the Markdown libraries I seem to get the following error:

Error in 'markdown' filter: Django does not support versions of the Python markdown library < 2.1.

As an example, it occurs on a tag such as:

{{ticket.get_description|markdown:"safe,footnotes,tables"}}

The get_description function is defined in the Ticket model. We've upgraded to Django 1.5 recently and the code was written pre Django 1.4. I've also upgraded the Markup library to 2.3.1 but the problem still persists. I've also cleared old .pyc files, just to be sure.

From what I've read, the django.contrib.markup libraries have been deprecated. So, what would the suggested solution/alternative be?


Solution

  • one idea is to install markdown2 library of python see here then you create your decorator

    import markdown2
    .. all other imports needed..
    
    register = template.Library()
    
    @register.filter(is_safe=True)
    @stringfilter
    def markdown2(value):
        return mark_safe(markdown2.markdown(force_unicode(value),safe_mode=True,enable_attributes=False))
    

    then you use it

    {% load myapp_markup %}
    {{ value|markdown2 }}
    

    code is adpated (and not tested) from here