金字塔、变色龙与模板渲染
我开始了一个项目,使用的是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实体:
<div class="clear"></div>
所以,显然页面看起来不太好。
问题似乎出在渲染方法上,因为base.pt模板的html显示是正常的。
1 个回答
6
使用 ${}
这种写法时,里面的内容默认会被转义,这样做是为了防止一些恶意攻击,比如XSS注入攻击。
如果你想让内容不被转义,可以在前面加上 structure:
这个前缀,这样就能告诉渲染引擎不要转义你的文本了:
<div>${structure: body}</div>