[心得] Flask + AngularJS + Jinja2

楼主: Killercat (杀人猫™)   2016-01-08 01:37:38
最近在玩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分找解法 =口=
作者: amigcamel (阿吉amig)   2016-01-08 11:25:00
不想改可用{% raw %}{% endraw %}
作者: uranusjr (←這人是超級笨蛋)   2016-01-08 14:24:00
如果要玩 AngularJS 建议还是改一下, 用 raw 会写到手废
作者: maxjoiny (封尘)   2016-01-08 20:50:00
ANGULARJS 可以透过config去换符号 把{{}} 改成别的就好

Links booklink

Contact Us: admin [ a t ] ucptt.com