2013-05-22 2 views
4

При использовании библиотеки Markdown я, кажется, чтобы получить следующее сообщение об ошибке:Устранение ошибок при использовании уценки фильтра в шаблоне Django

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

В качестве примера, это происходит на теге, такие как:

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

Функция get_description определена в модели Ticket. Недавно мы обновили Django 1.5, а код был написан до Django 1.4. Я также обновил библиотеку Markup до 2.3.1, но проблема все еще сохраняется. Я также очистил старые файлы .pyc, просто чтобы быть уверенным.

Из того, что я читал, библиотеки django.contrib.markuphave been deprecated. Итак, каково предлагаемое решение/альтернатива?

ответ

4

одна идея состоит в том, чтобы установить markdown2 библиотеку питона see here затем создать свой декоратор

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)) 

затем использовать его

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

код adpated (не проверено) от here

+0

Спасибо вам EsseTi! Это хорошая альтернатива. – jvndev

+3

Вот более полная версия: https://gist.github.com/defrex/6194514 – defrex

+0

Автор python-markdown2 опубликовал [приложение django на основе python-mardown2] (https://github.com/trentm/ Джанго-уценка-де). С помощью этого приложения вы можете выполнить '{{значение | markdown}}'. – Bentley4

2

Просто обновление:

Мой декоратора выглядит следующим образом:

import markdown2 
from django import template 
from django.template.defaultfilters import stringfilter 
from django.utils.encoding import force_unicode 
from django.utils.safestring import mark_safe 

register = template.Library() 

@register.filter(is_safe=True) 
@stringfilter 
def convertTxt(value): 
    return mark_safe(markdown2.markdown(force_unicode(value))) 

register.filter('convertTxt', convertTxt) 

Кроме того, я заметил, что это не разумно, чтобы назвать свой модуль или ваш метод markdown2 :)