某些 HTML 实体代码未被评估

问题描述 投票:0回答:4

我有一个从数据库传递信息的视图:

def serve_article(request, id):
    served_article = Article.objects.get(pk=id)

    # Strips out new line and tab characters
    article_snippet = served_article.full_text.replace('\n','').replace('\t','')

    # Gets first 300 word characters
    article_snippet = re.match(r'(.{,300})\W', article_snippet).group(1)

    return render(request, 'article.html', {'served_article':served_article,
                                            'article_snippet':article_snippet})

article_snippet
,在渲染时是一个 unicode 字符串,包含许多 HTML 实体代码(例如:渲染时
’
映射到 ' 和
©
映射到 ©)

但是,模板中的

{{ article_snippet }}
不会评估这些符号,将它们留空,就好像它们被包裹在
<code>
标签内一样(它们不是)。

我在顶部有

<meta charset="utf-8">
,页面上的其他符号评估良好,所以显然这些符号正在以某种方式转义。为什么会发生这种行为?如何禁用它?

html django unicode character-encoding
4个回答
2
投票

要禁用单个变量的自动转义,请使用

safe
过滤器:

This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}

https://docs.djangoproject.com/en/dev/topics/templates/

确保您的变量不包含用户提供的危险 HTML(

<script>
标签等)。


2
投票

Riateche 建议使用安全过滤器,它在 90% 的情况下都能为您服务,其他时候(需要将 HTML 格式化为消息 - 使用 django 消息框架)您需要能够手动完成。

手动使字符串安全:https://docs.djangoproject.com/en/1.4/ref/utils/#django.utils.safestring.mark_safe

from django.utils.safestring import mark_safe

def serve_article(request, id):
    served_article = Article.objects.get(pk=id)

    # Strips out new line and tab characters
    article_snippet = served_article.full_text.replace('\n','').replace('\t','')

    # Gets first 300 word characters
    article_snippet = re.match(r'(.{,300})\W', article_snippet).group(1)

    # MARK THIS VALUE AS SAFE IN YOUR VIEW
    article_snippet = mark_safe(article_snippet)

    return render(request, 'article.html', {'served_article':served_article,
                                        'article_snippet':article_snippet})

0
投票

我在 Django V1.9 中发现,如果将 safe 模板标签堆叠在其他模板标签之后,它不起作用,因此请确保 safe 直接位于上下文变量之后!

.py代码

context['variable'] = "&trade;"

HTML

以下作品

{{ variable|safe|capfirst|linebreaksbr }} -> displays: TM

以下内容不起作用

{{ variable|capfirst|linebreaksbr|safe }} -> displays: &trade;

0
投票

最常见的错误是给出错误的 复制并粘贴正确的链接 即,访问 www.angular js org 点击下载角度js 复制 CDN 链接 粘贴到前面 所以这会给你正确的 html 评估答案..

© www.soinside.com 2019 - 2024. All rights reserved.