最近在玩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分找解法 =口=