我正在使用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)
答案 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)