在Django模板渲染前剥离JavaScript代码
{% if posts %}
{% for p in posts %}
{{p|safe}}
{% endfor %}
{% endif %}
我想让这个显示HTML,但不想让它运行JavaScript,我该怎么做呢?
1 个回答
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)
(关于模板过滤器和标签放在哪里:自定义模板标签和过滤器/代码布局)
简单说明:
在你的应用文件夹里创建一个名为 templatetags
的文件夹。然后添加一个空文件 __init__.py
(这样它就变成了一个包),再创建一个模块文件来放过滤器,命名为 my_filters.py
。把代码复制到这个文件里。
在模板文件中添加(在第一次使用过滤器之前): {% load my_filters %}
使用方法:
{% if posts %}
{% for p in posts %}
{{ p|stripjs }}
{% endfor %}
{% endif %}