解决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 相关文章推荐
js获取select选中的option的text示例代码
Dec 19 Javascript
js使用正则实现ReplaceAll全部替换的方法
Aug 22 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
js实现本地图片文件拖拽效果
Jul 18 Javascript
浅谈mvvm-simple双向绑定简单实现
Apr 18 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 Javascript
webpack安装配置与常见使用过程详解(结合vue)
Jun 01 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 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
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
javascript数组去掉重复
2011/05/12 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vue如何进行动画的封装
2018/09/26 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
python设计模式大全
2016/06/27 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Python线程创建和终止实例代码
2018/01/20 Python
python的继承知识点总结
2018/12/10 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
白酒代理协议书范本
2014/10/26 职场文书
大国崛起观后感
2015/06/02 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python