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 视图装饰器并根据我的需要对其进行了修改,我确定我做错了,但事实并非如此。我不知道的主要事情 - 如何让我的手在project_id_key装饰器内的 var 上?

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 回答