Django模板变量如何传递给外部js调用的方法小结


Posted in Python onJuly 24, 2017

前言

因为工作的需要,最近一直在思考如何更好的组织Django中的静态资源,比如JS、CSS一类,如何结合前端构建工具写出更好的代码以及结构呢?下面这篇文章就给大家详细介绍了实现的方法,话不多说,来一起看看详细的介绍:

方法如下:

首先需要解决的一个问题就是某些时候需要把JS代码写在模板里来获取后台传递过来的变量,比如:

<div>
<h1>Test</h1>
<div id="my-test" ></div>
</div>
<script>
$(function(){
 $('#my-test').html("{{ some_var_from_view }}")
});
</script>

这么写代码的话,别扭不说,前端的那些构建工具比如webpack,gulp的使用范围也将大大降低。

首先说结论,想完全剥离JS和模板而又需要使用模板渲染的数据,我是没想到什么好办法。如果读者有好办法希望赐教。
既然不能完全剥离,那么就进最大的努力分离JS所需的数据和代码吧。

既然需要模板渲染数据给JS使用,最先想到的办法就是把数据渲染到HTML代码中并隐藏。这种方法的优点就在于简单,甚至模板中都可以完全不使用<script></script>标签。缺点则是会渲染出很多的隐藏字段,JS中要写大量的getElementsByxxxx一类的代码来获取数据。

既然如此,那么使用一种折中的办法,在HTML中使用<script></script>标签将后台传递的数据渲染成JS对象,然后JS代码中则可以直接使用这个对象了。

比如模板中:

<script>
var MyViewVar = {
 var_1: {{ var_1 }},
 var_2: {{ var_2 }},
};
</script>
...
<script type="text/javascript" src="/js/test_script.js"></script>

使用这种方式需要注意一点就是尽量先写渲染JS变量的代码,比如写在head中,然后再引入外部JS文件。这样,在test_script.js中就可以直接使用MyViewVar这个对象了。

当然了,既然现在流行SPA(Single Page Application)网站,那么django作为后端仅提供JSON数据也是一种办法,不过这样比较考验前端人员的能力了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python实现的简单FTP上传下载文件实例
Jun 30 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
如何通过python画loss曲线的方法
Jun 26 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
python如何从文件读取数据及解析
Sep 19 Python
使用Python函数进行模块化的实现
Nov 15 Python
python实现打砖块游戏
Feb 25 Python
python的列表List求均值和中位数实例
Mar 03 Python
python PIL模块的基本使用
Sep 29 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 #Python
apache部署python程序出现503错误的解决方法
Jul 24 #Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 #Python
Python实现购物程序思路及代码
Jul 24 #Python
python实现上传下载文件功能
Nov 19 #Python
分享几道你可能遇到的python面试题
Jul 24 #Python
python 判断是否为正小数和正整数的实例
Jul 23 #Python
You might like
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
node使用request请求的方法
2019/12/20 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
python中threading超线程用法实例分析
2015/05/16 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
连锁超市项目计划书
2014/09/15 职场文书
华清池导游词
2015/02/02 职场文书
学校捐书活动总结
2015/05/08 职场文书
美容院管理规章制度
2015/08/05 职场文书
公司转让协议书
2016/03/19 职场文书