解决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  THIS详解 面向对象
Mar 25 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
EasyUI学习之Combobox级联下拉列表(2)
Dec 29 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
基于javascript的无缝滚动动画1
Aug 07 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
使用angular写一个hello world
2015/01/23 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
求职信需要的五点内容
2014/02/01 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
学生会主席任命书
2015/09/21 职场文书
Python如何加载模型并查看网络
2022/07/15 Python