2012-09-25 54 views
0

我有一個簡單的視圖函數和一個裝飾器,並且我想使用傳遞給裝飾器中查看的參數。我一直在搜索,但還沒有找到任何例子,我仍然不確定這是否可能,如果是的話 - 如何做到這一點?訪問視圖在裝飾器中的參數,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?

回答

3

在_wrapped_view中,您可以訪問args和kwargs。所以project_id_key應該是args[0]。 但我寧可更明確地做:

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

它將在kwargs_wrapped_view,即project_id_key = kwargs['project_id_key']

相關問題