Django - 分页不使用自定义SQL查询

时间:2013-06-19 12:53:50

标签: django django-pagination

我有点没有线索,为什么我不能让分页工作就是这种情况。

我在视图中完成了自定义SQL查询。

def latest_comments_view(request):
    from django.db import connection, transaction
    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    from bicicleta.apps.comments.models import MPTTComment

    # Get the last comments, the last ones came first
    cursor = connection.cursor()
    cursor.execute("select dc.id as comment_id, em.id as main_id, es.n_section, dc.user_id, dc.user_name, dc.comment, dc.submit_date, cmptt.date_last_update, em.title as main_title, uu.profile_picture \
                    from django_comments dc \
                    join django_content_type dct on dc.content_type_id = dct.id \
                    join bicicletaengine_main em on em.id::int4 = dc.object_pk::int4 \
                    join comments_mpttcomment cmptt on cmptt.comment_ptr_id = dc.id \
                    join bicicletaengine_section es on es.id = em.section_id \
                    left join userprofile_userprofile uu on uu.user_id = dc.user_id \
                    where \
                    dc.is_public = 'true' \
                    order by dc.submit_date desc, cmptt.date_last_update asc") 
    comments = utils.dictfetchall(cursor)
    #pdb.set_trace()

    # Now, with the cursor above create the MPTTComment's objects
    mpttcomments = []
    for item in comments:
        mpttcomment = MPTTComment.objects.get(id=item['comment_id'])
        mpttcomments.append(mpttcomment)


    # Pagination
    paginator = Paginator(mpttcomments, 3)

    page = request.GET.get('pagina')
    try:
        comments = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        comments = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        comments = paginator.page(paginator.num_pages)

    return render_to_response('bicicletaengine/latest_comments/latest_comments.html', {'comments': comments, 'mpttcomments': mpttcomments}, context_instance=RequestContext(request))  

模板:

<div class="all-comments">
    {% for item in mpttcomments %}  {# {% for item in comments %}  #}

    {{ item.id }}

    {% endfor %}
    <div >
      <ul>
        {% if comments.has_previous %}
        <li><a href="?pagina={{ comments.previous_page_number }}">Página anterior</a></li>
        {% endif %}
        {% if comments.has_next %}
        <li><a href="?pagina={{ comments.next_page_number }}">Página seguinte</a></li>
        {% endif %}
      </ul>
    </div>      
</div>

症状是正确显示页数,但在每个页面上我看到相同的结果。

有人能给我一些线索吗?这个自定义SQL查询是否只能与自定义管理器一起使用?

最诚挚的问候,

0 个答案:

没有答案