代码之家  ›  专栏  ›  技术社区  ›  T. Stone

django中的kwargs和基于类的视图

  •  0
  • T. Stone  · 技术社区  · 14 年前

    我搜了搜so和django医生,似乎找不到这个。我正在扩展 django.contrib.comments公司 应用程序以使用我的webapp中的自定义权限系统。对于审核操作,我试图使用基于类的视图来处理注释的基本查询和对它的权限检查。 (本文中的“ecomment”是我的“增强注释”,继承自基本django注释模型。)

    我的问题是 comment_id 是从url.py中的url传入的Kwarg。如何从基于类的视图中正确地检索它?

    现在,Django正在抛出错误 TypeError: ModRestore() takes exactly 1 argument (0 given) . 代码如下。

    URLS.Py

    url(r'restore/(?P<comment_id>.+)/$', ModRestore(), name='ecomments_restore'),
    

    VIEW

    def ECommentModerationApiView(object):
    
        def comment_action(self, request, comment):
            """
            Called when the comment is present and the user is allowed to moderate.
            """
            raise NotImplementedError
    
        def __call__(self, request, comment_id):
            c = get_object_or_404(EComment, id=comment_id)
            if c.can_moderate(request.user):
                comment_action(request, c)
                return HttpResponse()
            else:
                raise PermissionDenied
    
    def ModRestore(ECommentModerationApiView):
        def comment_action(self, request, comment):
            comment.is_removed = False
            comment.save()
    
    2 回复  |  直到 13 年前
        1
  •  10
  •   stefanw    14 年前

    您没有使用基于类的视图。你不小心写了 def 而不是 class :

    def ECommentModerationApiView(object):
    ...
    def ModRestore(ECommentModerationApiView):
    

    可能是:

    class ECommentModerationApiView(object):
    ...
    class ModRestore(ECommentModerationApiView):
    
        2
  •  3
  •   Brian Hicks    13 年前

    另外,您的url模式需要如下所示:

    url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),