在django模板中渲染之前剥离javascript代码

时间:2011-06-22 18:43:49

标签: javascript python django

{% if posts %}
    {% for p in posts %}
        {{p|safe}}
    {% endfor %}
{% endif %}

我希望这能渲染html而不是javascript,我该怎么办?

1 个答案:

答案 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 %}