我有一个页面显示按日期分组的消息,并通过AJAX分页 考虑数据库包含9条消息
并且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模板,但是我仍然需要检测日期组是否重复。
任何帮助将不胜感激,提前致谢。
答案 0 :(得分:0)
为什么不考虑根据天数而不是消息数量来调整视图逻辑?通过这种方式,您可以提供一种方法来控制返回的数据量,但您不必重新编写表示层以使用客户端模板或做任何“hackish”。
或者,如果这不是一个选项,那么最直接且易于管理的方法似乎是在客户端处理所有分组(例如,JavaScript模板)。