[心得] 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