我想我会很聪明,写一个调用会话变量的包装器(很多都存在)并将其添加到需要会话变量的(django)视图中。但是我似乎不理解变量的范围,或者我写错了。
我的包装是:
def s_vars(func_to_decorate):
@wraps(func_to_decorate)
def wrapper(request, *args, **kwargs):
#add all the session variables to kwargs and accessible for the decorated function.
user_obj = request.user
datepicker = request.session['datepicker']
date_format = request.session['date_format']
.........
country = request.session['country']
metric = request.session['metric']
qrydtm = request.session.get("qrydtm",date.today())
result = func_to_decorate(request, *args, **kwargs)
#any post view checks to be done go here
#return to the function to be decorated.
return result
return wrapper
然后对于视图,我有类似的东西:
@s_vars
def main(request, template_name='placeholder.html'):
return render_to_response(template_name, RequestContext(request,{
'user':user_obj
}))
但这会导致在方法“main”中无法访问 user_obj 的错误。我的理解是这是一个内部函数,因此这个内部函数“main”可以访问“包装器”方法下列表中的变量。我在这里想念什么?