解决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 相关文章推荐
Prototype ObjectRange对象学习
Jul 19 Javascript
JavaScript Eval 函数使用
Mar 23 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
HTML+JS实现在线朗读器
Feb 15 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
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
php jsonp单引号转义
2014/11/23 PHP
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
python爬取指定微信公众号文章
2018/12/20 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
python如何实现代码检查
2019/06/28 Python
python ftplib模块使用代码实例
2019/12/31 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
利用python实现逐步回归
2020/02/24 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
工商学院毕业生自荐信
2013/11/12 职场文书
行政主管职责范本
2014/03/07 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
群众路线剖析材料
2014/09/30 职场文书
2014年药房工作总结
2014/11/22 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
sql server 累计求和实现代码
2022/02/28 SQL Server