У меня есть представление, которое отправляет объект с разбивкой на страницы (в наборе запросов) в шаблон, который я далее отображаю в шаблоне в виде таблицы. То, что я пытаюсь сделать, это щелкнуть номер страницы на панели разбиения на страницы в шаблоне, он должен сделать вызов ajax, чтобы получить разбитый на страницы вывод для этого номера страницы и динамически обновить содержимое таблицы.
Вид:
def accounts(request):
#Including only necessary part
accounts_list = Accounts.objects.all()
paginator = Paginator(accounts_list, 25)
page = request.GET.get('page')
try:
accounts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
accounts = paginator.page(1)
except EmptyPage:
# If page is out of range, deliver last page of results.
accounts = paginator.page(paginator.num_pages)
context['accounts'] = accounts
return render(request, template, context)
Шаблон загружает это как:
{% if accounts %}
<table id="acc">
<tr>
<th>Field 1</th>
...
<th>Field N</th>
</tr>
{% for item in accounts %}
<tr>
<td>{{ item.field1 }}</td>
...<!-- Some complex logic with template tags too in here -->
<td>{{ item.fieldN }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
Теперь для панели разбивки на страницы я использую библиотеку Bootpag и могу отображать данные как :
$('.pagination_top').bootpag({
/*bootpag logic here */
}).on("page", function(event, num){
//$.ajax loading here where I can update the table div with new output
//or make the table div "template code" reload without reloading page
}
Извините, я не показал большую часть того, что я пробовал в части ajax, так как я совершенно не понимаю, как заставить шаблон повторно отображать новые учетные записи, возвращаемые без перезагрузки страницы.
Единственное грязное решение, о котором я могу думать, - это сгенерировать весь мой html в представлении, а затем обновить html таблицы div с новым возвращенным html ajax?
Как проще всего было бы перезагрузить div таблицы, используя логику рендеринга шаблона, написанную без перезагрузки страницы? Можно ли этого добиться, сделав табличную часть отдельным шаблоном и включив/расширив шаблоны?
Обратите внимание, что я не могу использовать метод получения всех данных в шаблоне, а затем использовать логику разбивки на страницы некоторых библиотек jquery/js, потому что полные данные относительно очень велики.