金字塔、变色龙与模板渲染

4 投票
1 回答
1760 浏览
提问于 2025-04-17 04:19

我开始了一个项目,使用的是Python的一个网页框架叫做'Pyramid',同时用的模板引擎是'chameleon'。

我对这些框架还是个新手,但因为客户需要,所以我得用它。

我按照步骤安装了这个框架,然后开始写代码,主要是为了练习!

我做的第一个应用是一个简单的CRUD应用,虽然有点傻,但也算是入门了。

我在我的__init__.py文件里,为每个视图写了下面的代码:

config.add_view('myenglishdictionary.views.modify', route_name='modify_route', renderer='templates/base.pt')

这里的base.pt是主要的模板,里面有头部和尾部,还有一个div,里面有以下代码:

<div>${body}</div>

在我的view.py文件里,每个视图都有两行类似下面的代码:

body = render('templates/list.pt',{'list':list ,'project':'myProject'}, request=request)
return {'body':body}

而在我的list.pt文件里,有一些内容会嵌入到base.pt里。

一切看起来都很顺利。但是在更新了库之后,现在我的模板显示不正常了。

原本应该显示的html代码,现在变成了html实体:

 &lt;div class="clear"&gt;&lt;/div&gt;

所以,显然页面看起来不太好。

问题似乎出在渲染方法上,因为base.pt模板的html显示是正常的。

1 个回答

6

使用 ${} 这种写法时,里面的内容默认会被转义,这样做是为了防止一些恶意攻击,比如XSS注入攻击。

如果你想让内容不被转义,可以在前面加上 structure: 这个前缀,这样就能告诉渲染引擎不要转义你的文本了:

<div>${structure: body}</div>

撰写回答