Django AJAX-load-more-pagination с группировкой - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть страница, на которой отображаются сообщения, сгруппированные по дате и разбитые на страницы через 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шаблоны, но все же я должен взломать, чтобы определить, повторяется ли дневная группа или нет.

Любая помощь будет оценена, заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2012

Почему бы вам не рассмотреть возможность настройки логики представления в соответствии с количеством дней, а не количеством сообщений? Таким образом, вы можете предложить способ контроля количества возвращаемых данных, но вам не придется переделывать свой уровень представления, чтобы использовать шаблоны на стороне клиента или делать что-то «хакерское».

В качестве альтернативы, если это не вариант, наиболее простым и управляемым подходом, по-видимому, является обработка всей вашей группировки на стороне клиента (например, шаблонизация JavaScript).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...