У меня есть страница, на которой отображаются сообщения, сгруппированные по дате и разбитые на страницы через AJAX.
Рассмотрим, что база данных содержит 9 сообщений
- 3 было отправлено 9 февраля
- 3 былоотправлено 8 февраля
- 3 отправлено 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>
Поэтому, когда клиент нажимает кнопку «загрузить старую», браузер отправляет запроск тому же представлению, которое будет отображаться на этот раз с шаблоном сообщения-фрагмента, в результате 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>
Когда я вставлю этот HTML-код в родительский 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>
Теперь у меня две группы на один и тот же день (8 февраля 2012 г.)
В настоящее время я делаю хакерское решение, чтобы это исправить.Я обнаруживаю, есть ли повторяющаяся группа, затем объединяю их.Хотя мне не нравится это решение.и мне интересно, если кто-то подумал о лучшем решении.
Примечание: я видел Django Endless Pagination , кажется, он обрабатывает часть ajax для меня, но это не решает проблему группировки.
Также я подумал о jQueryшаблоны, но все же я должен взломать, чтобы определить, повторяется ли дневная группа или нет.
Любая помощь будет оценена, заранее спасибо.