Django与Markdown 2.5.2,html输出不符合预期

时间:2015-01-02 04:10:33

标签: python html django markdown

我正在使用Django 1.7.1开发一个Web应用程序,并使用markdown库创建了一个降价过滤器。

我的降价过滤器:

from django import template
from markdown import markdown

register = template.Library()


@register.filter(name='markdown')
def markdown_processor(text):
    return markdown(text)

如果我传递一些字符串,即“###嘿”,浏览器会显示<h3>hey</h3>而不是:

这就是我在html文件中的内容:

{{ my_object.description|markdown }}

我已经检查过my_object.description,看看它是否是一个unicode字符串,使用:

isinstance(my_object.description, unicode)

3 个答案:

答案 0 :(得分:2)

正如您所发现的,Django的自动转义机制正是导致问题的原因。如果您将降价输出标记为安全,Django将不会自动转义它。

from django import template
from markdown import markdown
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter(name='markdown')
def markdown_processor(text):
    return mark_safe(markdown(text))

答案 1 :(得分:1)

知道了,我需要autoescape模板标签。

{% autoescape off %}
{{ my_object.description|markdown }}
{% endautoescape %}

答案 2 :(得分:0)

正如您所发现的,Django的自动逃逸是罪魁祸首。除了提供的其他建议之外,您可以将过滤器标记为“安全”,然后该过滤器返回的值将不会被转义(请注意使用is_safe=True):

from django import template
from markdown import markdown

register = template.Library()

@register.filter(name='markdown', is_safe=True)
def markdown_processor(text):
    return markdown(text)