{% if posts %}
{% for p in posts %}
{{p|safe}}
{% endfor %}
{% endif %}
我希望这能渲染html而不是javascript,我该怎么办?
答案 0 :(得分:4)
django
中没有可以做你想要的过滤器:剥离javascript并离开html。
您可以创建自定义模板过滤器来执行此操作:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.utils.encoding import force_unicode
import re
register = template.Library()
@register.filter
@stringfilter
def stripjs(value):
stripped = re.sub(r'<script(?:\s[^>]*)?(>(?:.(?!/script>))*</script>|/>)', \
'', force_unicode(value), flags=re.S)
return mark_safe(stripped)
(放置模板过滤器/标签的位置:Custom template tags and filters/Code layout)
简要说明:
在应用程序文件夹中创建名为templatetags
的文件夹。添加一个空文件__init__.py
(将其作为包)和一个包含过滤器my_filters.py
的模块文件。复制该文件中的代码。
在模板文件中添加(在首次使用过滤器之前):{% load my_filters %}
{% if posts %}
{% for p in posts %}
{{ p|stripjs }}
{% endfor %}
{% endif %}