Django中使用locals()函数的技巧


Posted in Python onJuly 16, 2015

对 current_datetime 的一次赋值操作:

def current_datetime(request):
  now = datetime.datetime.now()
  return render_to_response('current_datetime.html', {'current_date': now})

很多时候,就像在这个范例中那样,你发现自己一直在计算某个变量,保存结果到变量中(比如前面代码中的 now ),然后将这些变量发送给模板。 尤其喜欢偷懒的程序员应该注意到了,不断地为临时变量和临时模板命名有那么一点点多余。 不仅多余,而且需要额外的输入。

如果你是个喜欢偷懒的程序员并想让代码看起来更加简明,可以利用 Python 的内建函数 locals() 。它返回的字典对所有局部变量的名称与值进行映射。 因此,前面的视图可以重写成下面这个样子:

def current_datetime(request):
  current_date = datetime.datetime.now()
  return render_to_response('current_datetime.html', locals())

在此,我们没有像之前那样手工指定 context 字典,而是传入了 locals() 的值,它囊括了函数执行到该时间点时所定义的一切变量。 因此,我们将 now 变量重命名为 current_date ,因为那才是模板所预期的变量名称。 在本例中, locals() 并没有带来多 大 的改进,但是如果有多个模板变量要界定而你又想偷懒,这种技术可以减少一些键盘输入。

使用 locals() 时要注意是它将包括 所有 的局部变量,它们可能比你想让模板访问的要多。 在前例中, locals() 还包含了 request 。对此如何取舍取决你的应用程序。

Python 相关文章推荐
CentOS6.5设置Django开发环境
Oct 13 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
Python根据成绩分析系统浅析
Feb 11 Python
python for和else语句趣谈
Jul 02 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
python与idea的集成的实现
Nov 20 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
Django框架中render_to_response()函数的使用方法
Jul 16 #Python
在Python的Django框架中加载模版的方法
Jul 16 #Python
Django框架下在视图中使用模版的方法
Jul 16 #Python
详解Django中的过滤器
Jul 16 #Python
在Python的Django框架中为代码添加注释的方法
Jul 16 #Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 #Python
Python实现数通设备端口使用情况监控实例
Jul 15 #Python
You might like
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
关于python多重赋值的小问题
2019/04/17 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
如何基于python实现脚本加密
2019/12/28 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
带病坚持工作事迹
2014/05/03 职场文书
2014年计生标语
2014/06/23 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
鸡毛信观后感
2015/06/11 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL