0

私が次の見解を持っているとしましょう:

def show(request):
    protect(request)

    ... some more code here...

    return render_to_response
    ...

「プロテクト」は、私が次のようにインポートしている別のアプリビューです:watch.actionsからインポートプロテクト

プロテクトでは、いくつかのチェックを行い、条件が満たされた場合は、「プロテクト」から直接render_to_responseを使用して、表示に戻らないようにします。条件が満たされない場合は、通常は「show」に戻ってコードの実行を続けたいと思います。

どうすればいいですか?

ありがとう。

4

1 に答える 1

1

その唯一の目的があなたが説明したことである場合はprotect、ビューデコレータとして書くことを検討する必要があります。この回答は、その方法の一例を示しています。

私が書いたビューデコレータに基づくと、protectデコレータは次のようになります。

from functools import wraps

from django.utils.decorators import available_attrs

def protect(func):
    @wraps(func, assigned=available_attrs(func))
    def inner(request, *args, **kwargs):
        if some_condition:
            return render_to_response('protected_template')
        return func(request, *args, **kwargs)
    return inner

これにより、次のように使用できるようになります。

@protect
def show(request):
   ...
   return render_to_response(...)
于 2013-01-15T00:25:13.130 に答える