Django渲染模板变量包含HTML作为明文,但源代码具有样式

时间:2018-04-20 02:58:22

标签: html django django-templates django-views

我对Django 2.0.4有一个奇怪的问题(因为我不熟悉它可能不是很奇怪)。

我有一个模板,我从视图中呈现,传入的数据是一个包含HTML的字符串。

我的视图将模板呈现为:

return render(request, 'template.html', { 'data' : data })

data.content包含上面的HTML。

在我的模板中,我将其呈现为:

template.html(有效):

{{ data.content|safe }}

这很好。但是,当我将此模板包含在其他模板中时,HTML将停止正确呈现。

template.html(我想要的):

{% include 'header.html' %}

{{ data.content|safe }}

{% include 'footer.html' %}

上面渲染了header.html和footer.html,但其间的data.content | safe部分实际上变成了没有样式的文本。如果我查看源它是正确的HTML(真正的标签,类等等,不是&有趣的业务。),但浏览器不会对其应用渲染。它只是卷起明文,例如一个单词周围的强标签不要使它变粗,列表只是换行符等。即使顶部和底部模板中的HTML正确包含在可显示的HTML中。

最奇怪的部分是从该变量正确呈现的唯一HTML是hrefs。没有其他的。我认为没有其他标签可行,这很疯狂。也没有CSS搞乱HTML。

我也尝试使用{%autoescape off%} ... {%endautoescape%},结果相同。

显然,我的目的是让我的视图显示由多个模板组成的HTML页面,其中的值分布在它们之间。然而,我甚至无法正确显示一个变量,更不用说其他任何变量了。

非常感谢您的帮助。

编辑:

header.html中:

{% load static %}
  <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Test</title>
      <meta name="Description" content="" />
      <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,600,600i,700|Open+Sans:300,400,400i,600,700|Roboto:300,400,400i,700|Arvo:400,400i,700" rel="stylesheet">
      <link rel="stylesheet" type="text/css" href="{% static "org/css/foundation.min.css" %}"/>
      <link rel="stylesheet" type="text/css" href="{% static "org/css/styles.css" %}"/>
    </head>
    <body>

template.html:

{{data.content | safe}}

&#39; data.content&#39;是字符串&#39; <strong>test</strong>&#39;

footer.html:

  </body>
</html>

生成的视图来源:

<!DOCTYPE html>
  <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Test</title>
      <meta name="Description" content="" />
      <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,600,600i,700|Open+Sans:300,400,400i,600,700|Roboto:300,400,400i,700|Arvo:400,400i,700" rel="stylesheet">
      <link rel="stylesheet" type="text/css" href="/org/css/foundation.min.css" />
      <link rel="stylesheet" type="text/css" href="/org/css/styles.css" />
    </head>
    <body>

      <strong>test</strong>

    </body>
  </html>

生成的显示的HTML页面只是测试&#39;没有强烈的造型。

0 个答案:

没有答案