在 django 模板中渲染之前去除 javascript 代码

发布于 2024-11-17 05:14:03 字数 155 浏览 0 评论 0原文

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

我希望它渲染 html 但不渲染 javascript,我该怎么办?

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

I want this to render html but not javascript, what should I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静若繁花 2024-11-24 05:14:03

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

There is no filter in django that can do what ou want: strip javascript and leave html.

You can create a custom template filter to do that:

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)

(Where to put template filters/tags: Custom template tags and filters/Code layout)

Brief explanation:

Create a folder named templatetags in your application folder. Add an empty file __init__.py (for it to be a package) and a module file that will contain the filter, my_filters.py. Copy the code in that file.

In the template file add (before any first use of the filter): {% load my_filters %}

Usage:

{% if posts %}
    {% for p in posts %}
        {{ p|stripjs }}
    {% endfor %}
{% endif %}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文