2012-02-09 84 views
3

我有一个页面显示按日期分组的消息,并通过AJAX进行分页。
考虑数据库包含9个消息Django AJAX带分组加载分页

  • 3被送往2月9日
  • 3被送往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> 

和消息 - 摘录的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> 

因此当客户端点击“加载较老的“时,浏览器将把请求发送到相同的视图,这将在消息sni上进行渲染PPET模板,产生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,结果会是这样

<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日)
目前我做了一个骇客解决方案来解决这个问题。我检测是否有重复组,然后合并它们。虽然,我不喜欢这个解决方案。我想知道是否有人想到更好的解决方案。

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

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

+0

如果您在AJAX响应中返回HTML,那么处理jQuery中的重复组似乎是最简单的解决方案。 – 2012-02-24 12:36:34

回答

0

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

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

+0

我认为在客户端分组是最好的解决方案,尽管现在我会保留我的黑客解决方案。 – Radian 2012-03-04 15:38:44