2010-03-04 5 views
0

J'ai recherché SO et le document Django et je n'arrive pas à le trouver. J'étend la fonctionnalité de base de l'application django.contrib.comments pour utiliser le système d'autorisation personnalisé qui est dans ma webapp. Pour les actions de modération, j'essaie d'utiliser une vue basée sur les classes pour gérer l'interrogation de base du commentaire et la vérification des autorisations. (« EComment » dans ce contexte est mon « commentaire amélioré », héritée de la base django modèle Commentaire.)Kwargs et les vues basées sur les classes dans Django

Le problème que je vais avoir est comment_id est un kwarg étant passé depuis l'adresse URL dans la. py. Comment puis-je récupérer cela correctement à partir d'une vue basée sur les classes?

À l'heure actuelle, Django lance l'erreur TypeError: ModRestore() takes exactly 1 argument (0 given). Code inclus ci-dessous.

urls.py

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

views.py

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() 

Répondre

10

Vous n'utilisez pas une vue basée sur la classe. Vous avez écrit accidentellement def au lieu de class:

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

devrait probablement:

class ECommentModerationApiView(object): 
... 
class ModRestore(ECommentModerationApiView): 
+4

homme Oh .... Je pense il est temps de rentrer à la maison pour la journée. –

3

aussi, votre modèle d'URL doit ressembler:

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