2012-05-05 13 views
1

私はデコレータでは最善ではなく、私はタスク用にビルドしようとしています(明らかに)。基本的に私は今、私は、パラメータに取るためにデコレータを構築する必要があり、私は(それはDjangoのアプリだが、それは問題ではありません)関数を返し、パラメータを受け入れるデコレータ

def foo(request, param): 
    # do something w/ param 

を飾るしたい私の機能を持っている:

@mydecorator('VALUE') 
def foo(request, param) 
    pass 

ので、基本的に私は私がこれまで持っているものですが、それは:(

def mydecorator(val): 
    @wraps(function) 
    def decorator(request, *args, **kwargs): 
     # do something with request with respect to val 
     return function(request, *args, **kwargs) 
    return decorator 
を働いていない。ここ

を返し、その後、要求にいくつかの作業を行う、値fooの中で取るために私のデコレータを必要とします

+0

2番目のコードブロックがあります最後に ':'がありません。私はこれを編集することができないので、編集で少なくとも6つの空白以外の文字が必要です – Anthon

答えて

2

fooの最後の定義には ':'がありませんが、主な問題は、mydecoratorが関数呼び出しであるのでデコレータを返さなければならないことです。 mydecoratorは引数を取ることはない場合

次のように記述します。

@mydecorator 
    def foo(request, param) 
     pass 

なく

@mydecorator() 
    def foo(request, param) 
     pass 

をあなたが開始する必要があり、その知識与えられた:

from functools import wraps 

def mydecorator(val): 
    def myrealdecorator(function): 
     @wraps(function) 
     def decorator(request, *args, **kwargs): 
      # do something with request with respect to val 
      print 'I know about', val 
      return function(request, *args, **kwargs) 
     return decorator 
    return myrealdecorator 

@mydecorator('VALUE') 
def foo(request, param): 
    print 'inside foo' 

foo('arg1', 'arg2') 
関連する問題