解决Angular.Js与Django标签冲突的方案


Posted in Javascript onDecember 20, 2016

前言

大家应该都知道,Django和Angular的模板系统使用了非常相似的标签系统,比如说,都是使用{{ content }}表示变量名字。所以Django和Angular配合使用的时候,会引起冲突。我在网上找到了一些解决方法。现在总结后分享给大家,下面来一起看看吧。

一、 改变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中不解释的一部分处理。

这种方案的优点是,不会增加代码的复杂度,并且是Django的原生支持,对Angular也没有影响。缺点是可能在很多地方用到很多verbatim标签,搞得template很乱。

三、 使用第三方插件

目前,我已知的有django-angular。这个插件有混合django和angular标签的功能。

正确解析angular标签的同时,还可以继续使用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负责返回静态的模板,数据交给angular,没大问题。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
JavaScript 学习笔记(五)
Dec 31 Javascript
10个实用的脚本代码工具
May 04 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 #Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 #Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 #Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 #Javascript
JS简单实现表格排序功能示例
Dec 20 #Javascript
深入了解JavaScript的逻辑运算符(与、或)
Dec 20 #Javascript
js定时器实例分享
Dec 20 #Javascript
You might like
解析php中heredoc的使用方法
2013/06/17 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP解析RSS的方法
2015/03/05 PHP
php链式操作的实现方式分析
2019/08/12 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
Python使用py2exe打包程序介绍
2014/11/20 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
实用自动化运维Python脚本分享
2018/06/04 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python——全排列数的生成方式
2020/02/26 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
气象学专业个人求职信
2014/04/22 职场文书
难忘的一天教学反思
2014/04/30 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
超市店长竞聘书
2015/09/15 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android