解决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 function代码
May 23 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
Aug 27 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
VSCode配置react开发环境的步骤
Dec 27 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
纯js实现无缝滚动功能代码实例
Feb 21 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
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python实现截屏的函数
2015/07/25 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
《纸船和风筝》教学反思
2014/02/15 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
企业公益活动策划方案
2014/08/24 职场文书
铅球加油稿100字
2014/09/26 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技