我需要您的帮助,以便在我的webapp2页面上显示渲染的html,数据取自ndb TextProperty。在下面的示例中,我插入了

<b>foo</b>


我转到开发服务器的数据存储查看器,并确认上面的值是存储的值。但是,当我在Chrome中加载页面时,页面的显示方式与我插入TextProperty时的显示方式一样,而不是呈现的版本。我从Chrome浏览器查看了一个源代码,发现该代码已投放:

&lt;b&gt;foo&lt;/b&gt;


我该如何纠正?

以下是详细信息。

我的模型如下:

Models.py
=========
from google.appengine.ext import ndb
class MyPosts(ndb.Model):
slug = ndb.StringProperty(indexed=True)
content = ndb.TextProperty(indexed=False)


我可以在模型中插入一堆html代码(仅在body标签中插入)。

这是我的控制器。当我得到记录时,查询工作正常。此外,由于页面加载成功,路径也没有问题。

Controller.py
=============
import os
from google.appengine.ext.webapp import template
import webapp2
from Models import MyPosts
class ViewMyPost(webapp2.RequestHandler):
def get(self,title):
    ds = MyPosts.query(MyPosts.slug == title).fetch(1)
    content = str(ds[0].content)
    template_values = {
        'body': content,
    }
    path = os.path.join(os.path.dirname(__file__), 'views/myview.html')
    self.response.out.write(template.render(path, template_values))


这是我的看法。 {{body}}的值由我的控制器提供。

myview.html
===========
<html>
<head>
    <title>My Page</title>
</head>
<body>
    {{ body }}
</body>
</html>


插入的数据:
我创建一个简短的例程,为我的TextProperty插入一个具有以下值的记录

<b>foo</b>


预期结果:
我希望页面显示foo,这是{{body}}的直接替换为TextProperty字段的值。

实际结果:
替换会发回我查询的整个TextProperty的值。但是,以某种方式我得到的标签转换如下:

&lt;b&gt;foo&lt;/b&gt;


我在这里想念什么?提前致谢!

最佳答案

这是一个简单的修复。

在视图上,我添加了“ | safe”过滤器。现在看起来像是{{body | safe}},而不是{{body}}。

myview.html
===========
<html>
<head>
    <title>My Page</title>
</head>
<body>
    {{ body|safe }}
</body>
</html>


这是有关安全过滤器的文档
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#safe

10-08 13:02