0

シンプルなビュー関数とそのデコレーターがあり、ビューに渡されたパラメーターをデコレーターで使用したいと考えています。私はグーグルで検索しましたが、これの例は見つかりませんでした。これが可能かどうかはまだわかりません。もしそうなら、どうすればいいですか?

デコレータを追加して表示:

@user_is_project_maintainer
def edit(request, project_id_key):

デコレータ自体:

    def user_is_project_maintainer():
        def decorator(view_func):
            @wraps(view_func, assigned=available_attrs(view_func))
            def _wrapped_view(request, *args, **kwargs):
                if (project_id_key.isdigit()) :
                    project = get_object_or_404(Project, pk=project_id_key)
                else :
                    project = get_object_or_404(Project, key=project_id_key)

                if (project.maintainer_id != request.user.id) :
                    return HttpResponseRedirect(reverse('core.views.index', args=(project.key,)))
                else :
                    view_func(request, *args, **kwargs)

            return _wrapped_view
        return decorator

デフォルトの django ビュー デコレータの 1 つをコピーし、必要に応じて修正しました。間違いを犯したと確信していますが、そうではありません。私が理解できない主なこと-project_id_keyデコレータ内の変数を手に入れる方法は?

4

2 に答える 2

3

それはkwargsin _wrapped_view、つまりになりproject_id_key = kwargs['project_id_key']ます。

于 2012-09-25T18:50:33.070 に答える
3

_wrapped_view では、args と kwargs にアクセスできます。したがって、project_id_key は として利用できるはずですargs[0]。しかし、私はむしろより明示的な方法でそれを行いたいです:

def _wrapped_view(request, project_id_key, *args, **kwargs):
于 2012-09-25T18:51:06.707 に答える