我有一个简单的视图函数和一个装饰器,我想在装饰器中使用传递给视图的参数。我已经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?
答案 0 :(得分:3)
在_wrapped_view中,您可以访问args和kwargs。因此project_id_key应该以{{1}}的形式提供。 但我宁愿以更明确的方式做到这一点:
args[0]
答案 1 :(得分:2)
它位于kwargs
中的_wrapped_view
,即project_id_key = kwargs['project_id_key']
。