【发布时间】:2012-03-02 00:49:32
【问题描述】:
我有一个页面,显示按日期分组的消息,并通过 AJAX 进行分页。
考虑数据库包含 9 条消息
- 3 已于 2 月 9 日发送
- 3 已于 2 月 8 日发送
- 3 已于 2 月 7 日发送
查询集仅限于 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-sn-p 的 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>
所以当Client点击“加载旧”时,浏览器会将请求发送到同一个视图,这一次会在message-sn-p模板上渲染,产生这样的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 模板,但我仍然必须破解来检测日组是否重复。
任何帮助将不胜感激,在此先感谢。
【问题讨论】:
-
如果您在 AJAX 响应中返回 HTML,而不是在 jQuery 中处理重复的组似乎是最简单的解决方案。
标签: jquery ajax django pagination