解决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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
javascript tips提示框组件实现代码
Nov 19 Javascript
Javascript简单实现可拖动的div
Oct 22 Javascript
js获取当前页面路径示例讲解
Jan 08 Javascript
eclipse导入jquery包后报错的解决方法
Feb 17 Javascript
用Jquery选择器计算table中的某一列某一行的合计
Aug 13 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
详解js删除数组中的指定元素
Oct 31 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
Feb 06 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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实现动态创建XML文档的方法
2018/03/30 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
python连接字符串的方法小结
2015/07/13 Python
简单谈谈Python中的闭包
2016/11/30 Python
python实现按任意键继续执行程序
2016/12/30 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
商务日语毕业生自荐信
2013/11/23 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
保安队长职务说明书
2014/02/23 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技