在django模板中呈现之前剥离javascript代码

Strip javascript code before rendering in django templates

本文关键字:剥离 javascript 代码 django      更新时间:2023-09-26
{% if posts %}
    {% for p in posts %}
        {{p|safe}}
    {% endfor %}
{% endif %}

我想让它呈现html而不是javascript,我该怎么办?

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