【问题标题】:Django AJAX load-more-pagination with groupingDjango AJAX 加载更多分页与分组
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 我认为在客户端分组是最好的解决方案,尽管我暂时保留我的老套解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 2013-08-16
  • 2010-09-08
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2016-09-30
相关资源
最近更新 更多