2012-02-09 40 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