Кварги и классовые взгляды в Джанго - PullRequest
0 голосов
/ 04 марта 2010

Я искал SO и Django Doc и не могу найти это. Я расширяю базовую функциональность приложения django.contrib.comments , чтобы использовать систему пользовательских разрешений, которая есть в моем веб-приложении. Для действий модерации я пытаюсь использовать представление на основе классов для обработки базового запроса комментария и проверки прав доступа к нему. («EComment» в данном контексте - это мой «расширенный комментарий», унаследованный от базовой модели комментариев django.)

Проблема, с которой я столкнулся, заключается в том, что comment_id - это передача kwarg с URL-адреса в urls.py. Как правильно извлечь это из представления на основе классов?

Прямо сейчас Django выдает ошибку TypeError: ModRestore() takes exactly 1 argument (0 given). Код включен ниже.

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

Ответы [ 2 ]

10 голосов
/ 04 марта 2010

Вы не используете представление на основе классов. Вы случайно написали def вместо class:

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

вероятно должно быть:

class ECommentModerationApiView(object):
...
class ModRestore(ECommentModerationApiView):
3 голосов
/ 20 апреля 2011

также, ваш шаблон URL должен выглядеть следующим образом:

url(r'restore/(?P<comment_id>.+)/$', ModRestore.as_view(), name='ecomments_restore'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...