解决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 相关文章推荐
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
AngularJS中$apply方法和$watch方法用法总结
Dec 13 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
Aug 16 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
axios实现文件上传并获取进度
Mar 25 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
Apr 01 Javascript
JS如何操作DOM基于表格动态展示数据
Oct 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
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
php常用hash加密函数
2014/11/22 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
初识PHP中的Swoole
2016/04/05 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
angular json对象push到数组中的方法
2018/02/27 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python列表list数组array用法实例解析
2014/10/28 Python
Python实现二分法算法实例
2015/02/02 Python
Python os模块常用方法和属性总结
2020/02/20 Python
Python yield的用法实例分析
2020/03/06 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
小学少先队活动方案
2014/02/18 职场文书
2015年财政所工作总结
2015/04/25 职场文书
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers