繁体   English   中英

访问装饰器中的视图参数,Django

[英]access view param in decorator, django

我有一个简单的视图函数,以及一个装饰器,并且我想使用传递给装饰器中的视图的参数。 我已经四处搜寻,但还没有找到任何示例,而且我仍然不确定这是否有可能,如果可以的话,该怎么做?

带有装饰器的视图:

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

在_wrapped_view中,您可以访问args和kwargs。 因此,project_id_key应该以args[0] 但是我宁愿以更明确的方式做到这一点:

def _wrapped_view(request, project_id_key, *args, **kwargs):

它将在_wrapped_viewkwargs中,即project_id_key = kwargs['project_id_key']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM