解決Angular.Js與Django標簽沖突的方案
前言
大家應該都知道,Django和Angular的模板系統(tǒng)使用了非常相似的標簽系統(tǒng),比如說,都是使用{{ content }}
表示變量名字。所以Django和Angular配合使用的時候,會引起沖突。我在網(wǎng)上找到了一些解決方法。現(xiàn)在總結后分享給大家,下面來一起看看吧。
一、 改變AngularJs的默認標簽
下面的代碼可以將Angular原來的標簽改成{[{ content }]}
。
修改Angular的標簽
myModule.config(function($interpolateProvider) { $interpolateProvider.startSymbol('{[{'); $interpolateProvider.endSymbol('}]}'); });
這是比較簡單,并且直觀的一種方法。修改之后的代碼比較容易閱讀,一眼就能看出來是Django的標簽還是Angular的。缺點是很容易與第三方的插件沖突(如果第三方的插件使用了指令等用到標簽的地方)。
二、 告訴Django不要渲染模板的其中一部分內容
從Django 1.5開始,支持{% verbatim %}
標簽(verbatim的意思是逐字翻譯的,字面意思的),Django不會渲染verbatim標簽包裹的內容:
{% verbatim %} {{if dying}}Still alive.{{/if}} {% endverbatim %}
這個標簽不支持嵌套,但是你可以為標簽添加名字:
{% verbatim myblock %} Avoid template rendering via the {% verbatim %}{% endverbatim %} block. {% endverbatim myblock %}
這樣,Django會尋找myblock的endverbatim作為結束的標志,中間插入了verbatim標簽,會作為myblock中不解釋的一部分處理。
這種方案的優(yōu)點是,不會增加代碼的復雜度,并且是Django的原生支持,對Angular也沒有影響。缺點是可能在很多地方用到很多verbatim標簽,搞得template很亂。
三、 使用第三方插件
目前,我已知的有django-angular。這個插件有混合django和angular標簽的功能。
正確解析angular標簽的同時,還可以繼續(xù)使用django的if等標簽。
{% load djng_tags %} {% angularjs ng %} <div{% if ng %} ng-repeat="item in items"{% endif %}> <h4><a ng-href="{{ item.absolute_url }}"{% if not ng %} href="{{ item.absolute_url }}"{% endif %}>{{ item.name }}</a></h4> <img ng-src="{{ item.image.url }}"{% if not ng %} src="{{ item.image.url }}"{% endif %} width="{{ item.image.width }}" height="{{ item.image.height }}" /> <div{% if ng %} ng-bind-html="item.description"{% endif %}>{% if not ng %}{{ item.description }}{% endif %}</div> </div> {% endangularjs %}
這樣做的缺點是,引入插件增加了代碼的復雜度,團隊的所有人都需要學習這種寫法,我個人感覺,也比較容易增加錯誤。
我覺得第二種比較合適, 寫入變量的時候盡量前后端分開,django負責返回靜態(tài)的模板,數(shù)據(jù)交給angular,沒大問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
AngularJS 獲取ng-repeat動態(tài)生成的ng-model值實例詳解
這篇文章主要介紹了AngularJS 獲取ng-repeat動態(tài)生成的ng-model值實例詳解的相關資料,這里提供實例代碼及實現(xiàn)效果圖,需要的朋友可以參考下2016-11-11對angular 監(jiān)控數(shù)據(jù)模型變化的事件方法$watch詳解
今天小編就為大家分享一篇對angular 監(jiān)控數(shù)據(jù)模型變化的事件方法$watch詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10angularjs中控制視圖的控制器的兩種注入依賴項及服務的寫法小結
在AngularJS中,控制器的依賴注入有兩種方法:顯式依賴注入和隱匿依賴注入,顯式依賴注入通過使用字符串數(shù)組形式來注入依賴項,本文給大家介紹angularjs中控制視圖的控制器的兩種注入依賴項及服務的寫法,感興趣的朋友一起看看吧2024-09-09AngularJS實現(xiàn)的獲取焦點及失去焦點時的表單驗證功能示例
這篇文章主要介紹了AngularJS實現(xiàn)的獲取焦點及失去焦點時的表單驗證功能,涉及AngularJS使用ng-blur、ng-focus針對表單事件監(jiān)聽相關操作技巧,需要的朋友可以參考下2017-10-10Angular4項目中添加i18n國際化插件ngx-translate的步驟詳解
這篇文章主要跟大家介紹了關于Angular4項目中添加i18n國際化插件ngx-translate的步驟,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-07-07Angular.js與Bootstrap相結合實現(xiàn)手風琴菜單代碼
這篇文章主要介紹了Angular.js與Bootstrap相結合實現(xiàn)手風琴菜單的相關資料,需要的朋友可以參考下2016-04-04