作者Killercat (杀人猫™)
看板Python
标题[心得] Flask + AngularJS + Jinja2
时间Fri Jan 8 01:37:38 2016
最近在玩AngularJS跟Google Application Engine,
PyCharm预设的组合就是Flask + Jinja2
配着Flask教学加上AngularJS教学,三分钟就踢到了铁板
<div ng-app="">
<p>Name : <input type="text" ng-model="name"></p>
<h1>Hello {{name}}</h1>
</div>
这个简单到不能再简单的东西,在网页上永远是错误的结果
本来对话筐输入会马上呈现在Hello後面,但是始终Hello後面都是一片空白
(正确结果请参照
http://tinyurl.com/hyhfo4n )
本着实事求是的精神,打开safari收到的html仔细端详了一下,原来他变成
<div ng-app="">
<p>Name : <input type="text" ng-model="name"></p>
<h1>Hello </h1>
</div>
搞个半天原来是{{ }}同时也是Jinja2的data binder的识别符号
Jinja2在render这个html的时候(render_template() )顺手把没bind到的东西移除了
当然直接拿掉Jinja2的renderer也是个方法
(就把每个endpoint最後的return render_template('template.html')
改成直接输出template.html内容就可以了)
不过这种CGI式的renderer还是在某些场合挺方便的,不想这样说宰就宰
後来查个半天,把jinja2的data binder识别符号换掉就好
不过网路上找到的解法是建议顺便把其他两组一起替换掉
jinja_options = app.jinja_options.copy()
jinja_options.update(dict(
block_start_string='<%',
block_end_string='%>',
variable_start_string='%%',
variable_end_string='%%',
comment_start_string='<#',
comment_end_string='#>'
))
app.jinja_options = jinja_options
暂时解决了这个问题了... 三分钟就撞墙,花30分找解法 =口=
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.169.162.116
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1452188261.A.F00.html
1F:→ amigcamel: 不想改可用{% raw %}{% endraw %} 01/08 11:25
2F:→ uranusjr: 如果要玩 AngularJS 建议还是改一下, 用 raw 会写到手废 01/08 14:24
3F:推 maxjoiny: ANGULARJS 可以透过config去换符号 把{{}} 改成别的就好 01/08 20:50