作者在 2010-03-22 01:01:36 发布以下内容
locals()小技巧
看看最近的current_datetime:
代码
def current_datetime(request):
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date':now})
now = datetime.datetime.now()
return render_to_response('current_datetime.html', {'current_date':now})
这个例子中你会发现你自己计算一些值后存储在变量中(例如now)并传递给模板
懒程序员可能会觉得有点繁琐,既要给临时变量取名又要给模板变量取名
这不仅仅是冗余,这是过度输入
如果你很懒或者你想保持代码整洁,使用Python内建的locals()方法
locals()返回一个包含当前作用域里面的所有变量和它们的值的字典,上面的代码可以重写:
代码
def current_datetime(request):
current_date = datetime.datetime.now()
return render_to_response('current_datetime.html', locals())
current_date = datetime.datetime.now()
return render_to_response('current_datetime.html', locals())
这里我们传递locals()的值而不是手动指定context字典,locals()包含了所有定义在当前方法的变量
而且,我们把now变量重命名为current_date,因为模板需要的是这个变量名
这个例子中locals()不会给你太大改善,但这个技术可以帮你少敲键盘
使用locals()需要注意的是它包含了所有当前变量,可能包括比你的模板想访问的更多的变量
上面的例子中,locals()也包括request变量,这依赖于你的程序
最后要注意的是locals()导致了一点点开销,因为Python不得不动态创建字典
如果你手动指定context字典则可以避免这项开销