[英]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_view
的kwargs
中,即project_id_key = kwargs['project_id_key']
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.