django-threadadedcomments, чтобы заказать комментарии по-разному - PullRequest
1 голос
/ 04 октября 2010

Я использую

{% get_threaded_comment_tree for OBJECT [TREE_ROOT] as CONTEXT_VAR %}:

, чтобы получить список всех моих комментариев для определенного объекта. Это прекрасно работает, но я хочу получить самые последние в верхней части моего списка. По умолчанию это возвращает самый старый в верхней части списка. Любые идеи о том, как мне этого добиться.

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

Это моя версия CommentListNode в файле threadadedcomments_tags.py, которая решает проблему:

class CommentListNode(BaseThreadedCommentNode):
    """
    Insert a list of comments into the context.
    """

    def __init__(self, flat=False, root_only=False, newest = True, **kwargs):
        self.flat = flat
        self.newest = newest
        self.root_only = root_only
        super(CommentListNode, self).__init__(**kwargs)

    def handle_token(cls, parser, token):
        tokens = token.contents.split()

        extra_kw = {}
        if tokens[-1] in ('flat', 'root_only'):
            extra_kw[str(tokens.pop())] = True

        if len(tokens) == 5:
            comment_node_instance = cls(
                object_expr=parser.compile_filter(tokens[2]),
                as_varname=tokens[4],
                **extra_kw
            )
        elif len(tokens) == 6:
            comment_node_instance = cls(
                ctype=BaseThreadedCommentNode.lookup_content_type(tokens[2],
                    tokens[0]),
                object_pk_expr=parser.compile_filter(tokens[3]),
                as_varname=tokens[5],
                **extra_kw
            )
        else:
            raise template.TemplateSyntaxError(
                "%r tag takes either 5 or 6 arguments" % (tokens[0],))
        return comment_node_instance

    handle_token = classmethod(handle_token)

    def get_context_value_from_queryset(self, context, qs): 
        if self.newest:
            qs = qs.extra(select={ 'tree_path_root': 'SUBSTRING(tree_path, 1, %d)' % PATH_DIGITS }).order_by('%stree_path_root' % ('-'), 'tree_path')  
        elif self.flat:
            qs = qs.order_by('-submit_date')
        elif self.root_only:
            qs = qs.exclude(parent__isnull=False).order_by('-submit_date')
        return qs
0 голосов
/ 28 января 2011

Следующий фрагмент кода работает для меня, он сортирует набор запросов комментариев (qs) в соответствии с самыми новыми первыми, сохраняя вложенные комментарии (ответы) в правильном иерархическом порядке.

Вам нужно будет заключить это в тег шаблона, чтобы сделать его пригодным для использования внутри шаблона ...

from django.contrib import comments
from threadedcomments.models import PATH_DIGITS

comment_model = comments.get_model()
newest = True
qs = comment_model.objects.filter(content_type=ctype,
                                  object_pk=discussion.pk).select_related()
qs = qs.extra(select={ 'tree_path_root': 'SUBSTRING(tree_path, 1, %d)' % PATH_DIGITS }) \
    .order_by('%stree_path_root' % ('-' if newest else ''), 'tree_path')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...