1

Iamは私のプロジェクトでdjangoデコレータを使用しています。Iamは引数付きの複数のビューを使用しており、1つのデコレータを呼び出す必要があります。

1つのビューだけをその引数で1回呼び出す必要があります。しかし、デコレータを使用した場所に関係なく、すべてのビューの値を提供するデコレータ。

私は議論が私が呼んだ特定の見解に属することを望みます。

私の見解とデコレータは次のとおりです。

def d(msg='my default message'):
    def decorator(func):
        print msg
        def newfn(request, **kwargs):
            return func(request, **kwargs)
        return newfn
    return decorator

@d('This is working')
def company_add(request):
   return ...

@d('Dont come')
def company_list(request, comp_id = None):
   return ...

company_addビューを呼び出すと、Iamは次のように出力を取得します。

This is working
Dont come

しかし、私の期待される結果は

This is working.

誰かが私が特定のビューに属する引数だけを印刷するのを手伝ってくれます。

4

2 に答える 2

2

print msg解決策は、newfnラッパーのスコープに移動することです。引数を指定してデコレータを呼び出すと、デコレータが実行され、上記の動作になります。

def d(msg='my default message'):
    def decorator(func):
        def newfn(request, **kwargs):
            print msg # The message should be printed here.
            return func(request, **kwargs)
        return newfn
    return decorator
于 2012-12-27T10:41:17.063 に答える