我对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;没有强烈的造型。