访问装饰,django中的视图参数

时间:2012-09-25 18:40:52

标签: python django view decorator

我有一个简单的视图函数和一个装饰器,我想在装饰器中使用传递给视图的参数。我已经google了一下,但没有找到任何这方面的例子,我仍然不确定这有可能,如果是这样 - 怎么做?

附加装饰器的视图:

@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?

2 个答案:

答案 0 :(得分:3)

在_wrapped_view中,您可以访问args和kwargs。因此project_id_key应该以{{1​​}}的形式提供。 但我宁愿以更明确的方式做到这一点:

args[0]

答案 1 :(得分:2)

它位于kwargs中的_wrapped_view,即project_id_key = kwargs['project_id_key']