Django AJAX加载了分组的更多分页

时间:2012-02-09 14:33:30

标签: jquery ajax django pagination

我有一个页面显示按日期分组的消息,并通过AJAX分页 考虑数据库包含9条消息

  • 3于2月9日发送
  • 3于2月8日发送
  • 3于2月7日发送

并且Queryset仅受限于5条消息。

查看代码看起来像这样

page = Paginator(queryset, int(request.GET['limit'])).page(request.GET['page'])
return paginator.page(request.GET['page']).object_list

HTML看起来像这样

<div class='messages-container'>
    {% include 'messages-snippet.html' %}
</div>
<a href='?page=2&limit=5'>Load older</a>

message-snippet的HTML看起来像这样

<div class='day-messages'>
    <span>9 Feb 2012</span>
    <p class='message'>Message 1</p>
    <p class='message'>Message 2</p>
    <p class='message'>Message 3</p>
</div>
<div class='day-messages'>
    <span>8 Feb 2012</span>
    <p class='message'>Message 4</p>
    <p class='message'>Message 5</p>
</div>

因此,当客户端点击“加载旧版”时,浏览器会将请求发送到同一视图,该视图将在消息片段模板上呈现此时间,从而生成如下HTML代码

<div class='day-messages'>
    <span>8 Feb 2012</span>
    <p class='message'>Message 6</p>
</div>
<div class='day-messages'>
    <span>7 Feb 2012</span>
    <p class='message'>Message 7</p>
    <p class='message'>Message 8</p>
</div>

当我在父div中注入这个html时,结果将是这样的

<div class='messages-container'>
    <div class='day-messages'>
        <span>9 Feb 2012</span>
        <p class='message'>Message 1</p>
        <p class='message'>Message 2</p>
        <p class='message'>Message 3</p>
    </div>
    <div class='day-messages'>
        <span>8 Feb 2012</span>
        <p class='message'>Message 4</p>
        <p class='message'>Message 5</p>
    </div>
    <div class='day-messages'>
        <span>8 Feb 2012</span>
        <p class='message'>Message 6</p>
    </div>
    <div class='day-messages'>
        <span>7 Feb 2012</span>
        <p class='message'>Message 7</p>
        <p class='message'>Message 8</p>
    </div>
</div>
<a href='?page=2&limit=5'>Load older</a>

现在我在同一天有两个小组(2012年2月8日)
目前我做了一个解决这个问题的hackish解决方案。我检测是否有重复的组,然后合并它们。虽然,我不喜欢这个解决方案。我想知道是否有人想到更好的解决方案。

注意:我见过Django Endless Pagination,它似乎为我处理了ajax部分,但它没有解决分组问题。
我还想到了jQuery模板,但是我仍然需要检测日期组是否重复。

任何帮助将不胜感激,提前致谢。

1 个答案:

答案 0 :(得分:0)

为什么不考虑根据天数而不是消息数量来调整视图逻辑?通过这种方式,您可以提供一种方法来控制返回的数据量,但您不必重新编写表示层以使用客户端模板或做任何“hackish”。

或者,如果这不是一个选项,那么最直接且易于管理的方法似乎是在客户端处理所有分组(例如,JavaScript模板)。