解决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 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
javascript匿名函数实例分析
Nov 18 Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 Javascript
jQuery实现简单二级下拉菜单
Apr 12 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
JS实现判断图片是否加载完成的方法分析
Jul 31 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
使用php计算排列组合的方法
2013/11/13 PHP
Yii清理缓存的方法
2016/01/06 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
Python功能键的读取方法
2015/05/28 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
Python-for循环的内部机制
2020/06/12 Python
医学护理系毕业生求职信
2013/10/01 职场文书
八年级历史教学反思
2014/01/10 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
优秀公益广告词大全
2014/03/19 职场文书
依法行政工作汇报
2014/10/28 职场文书
中学生自我评价2015
2015/03/03 职场文书
工程部岗位职责范本
2015/04/11 职场文书
Python与C++中梯度方向直方图的实现
2022/03/17 Python
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL