share
引数が
True
(ミドルウェアで処理されている)の場合、ビューを実行したくないときに、このデコレータを使用しています。
class no_share(object):
def __init__(self, view):
self.view = view
def __call__(self, request, *args, **kwargs):
"""Don't let them in if it's shared"""
if kwargs.get('shared', True):
from django.http import Http404
raise Http404('not availiable for sharing')
return self.view(request, *args, **kwargs)
現在、次のように動作しています:
@no_share
def prefs(request, [...])
@no_share('prefs')
def prefs(request, [...])
@no_share('prefs')
def prefs(request, [...])
しかし、私はこのように動作するように、少し機能を拡張したいと思います:
@no_share('prefs')
def prefs(request, [...])
私の質問は、追加の引数を受け入れるようにこのデコレータクラスを変更する方法は?
、私はすでにことを試してみましたが、私はそれが動作しませんでしたので、Djangoは違ったか何かうまくいくと思います。私はinitに 'print 'blah" 'を入れようとしましたが、devサーバを起動したときに私が得たのはたくさんの' blah's 'でした。それ以降はそれ以上のものはありません... – priestc
これは、__init__は一度しか呼び出されませんが、これで飾る各ビュー関数の定義には一度しか呼ばれません。 __call__は、サーバーが要求に応答するためにビュー関数を実行するたびに呼び出されます。 この回答は正しい方向です。あなたのケースに特有のより完全な答えを私の答えに見てください。 – taleinat