[心得] Flask + AngularJS + Jinja2

看板Python作者 (殺人貓™)時間9年前 (2016/01/08 01:37), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
最近在玩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://www.ptt.cc/bbs/Python/M.1452188261.A.F00.html

01/08 11:25, , 1F
不想改可用{% raw %}{% endraw %}
01/08 11:25, 1F

01/08 14:24, , 2F
如果要玩 AngularJS 建議還是改一下, 用 raw 會寫到手廢
01/08 14:24, 2F

01/08 20:50, , 3F
ANGULARJS 可以透過config去換符號 把{{}} 改成別的就好
01/08 20:50, 3F
文章代碼(AID): #1MZg9by0 (Python)
文章代碼(AID): #1MZg9by0 (Python)