0

私はデコレータを持っています:

def site_login_required(function=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
            gets site_id. checks stuff. if else.

これは通常の方法で呼び出されます:

@site_login_required
def frontPage(request, url_arg):  

デコレータは site_id を見つけます。これを frontPage 関数で使用できると便利です。それは可能ですか?もしそうなら、どのように?

4

1 に答える 1

2

デコレーター内でビュー関数を呼び出すときに、kwarg として渡すことができます。

def site_login_required(function=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
            site_id = get_site_id()
            url_arg = get_a_url()
            view_func(request, url_arg, site_id=site_id)

@site_login_required
def frontPage(request, url_arg, site_id=None, *args, **kwargs):
    ...

補足として、すべてのビュー関数で and を受け入れる*argsと便利な**kwargsので、このようなデコレータをラップして窒息させるのではなく、追加の引数を消費します。

于 2012-10-18T16:16:32.987 に答える