Можно использовать пространство имен самой передаваемой функции
def base_context(fun):
def decorate_maker(nums,*args):
fun.func_globals['nums'] = nums
return fun(*args)
return decorate_maker
@base_context
def fun(pow):
return [(k,v**pow) for k,v in nums.iteritems()]
nums = {'one':1,'two':2,'four':4}
>>>>fun(nums,2)
[('four', 16), ('two', 4), ('one', 1)]
>>>>fun(nums,3)
[('four', 64), ('two', 8), ('one', 1)]
У Вас это будет вот так, по всей видимости
def base_context(fun):
def decorate_maker(request, slug, var):
context = {}
context['info'] = slug
fun.func_globals['context']=context
return fun(request, var)
return decorate_maker