Я пытаюсь понять, как показать что-то вроде "Показ 1-10 из 52" с использованием нумерации django в моих шаблонах.
Я сам выполнил нумерацию страниц, но мне не пришло в голову это требование.
Есть идеи?
Я пытаюсь понять, как показать что-то вроде "Показ 1-10 из 52" с использованием нумерации django в моих шаблонах.
Я сам выполнил нумерацию страниц, но мне не пришло в голову это требование.
Есть идеи?
Не знаю, почему все так усложняют ситуацию. Как показано документация, все эти атрибуты уже доступны.
Объекты Paginator имеют атрибут count, который показывает общее количество объектов на всех страницах, а Page объекты имеют свойства start_index и end_index.
Итак, если вы передадите Page в контекст шаблона:
{{ page.start_index }} to {{ page.end_index }} of {{ page.paginator.count }}.
Вам нужно сделать что-то умеренно более сложное за кулисами. И обратите внимание, что, хотя я разработчик python, я давно использую werkzeug и jinja2, поэтому мой синтаксис django немного ржавый. Кроме того, это было сухое кодирование (как и в том, что я просто набрал его здесь в браузере) и должен быть протестирован, чтобы убедиться, что он работает по назначению.
Как правило, я создам объект разбиения на страницы и передаю его в объект запроса, который не фильтруется по страницам, вы также можете рассказать ему, сколько страниц и на какой странице вы находитесь.
Так что-то смутно похожее на:
Paginator(query, objects_per_page, current_page_number)
И затем передайте полученный объект paginator в шаблон.
Внутри paginator init вы хотите сделать что-то похожее на:
def __init__(self, query, objects_per_page, current_page_number):
self.total = query.count()
self.per_page = objects_per_page
self.current_page_number = current_page_number
self.lower_limit = objects_per_page * current_page_number
self.upper_limit = objects_per_page * (current_page_number + 1)
if self.upper_limit > self.total:
self.upper_limit = self.total
self.objects = query[self.lower_limit - 1:self.upper_limit - 1]
Затем в шаблоне вы сделаете что-то вроде
Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}}
И позже, когда вы будете готовы перебирать объекты, вы можете просто перебирать объекты paginator.objects.
Надеюсь, это даст вам общее представление о том, как вы можете это сделать.
Объект django Paginator имеет свойство num_pages. На ваш взгляд, вы можете просто передать правильные данные в свой шаблон и показать его там.
Итак, пример (грубая):
вид
current_page = ## input param
items_per_page = 10
paginator = Paginator(result, items_per_page)
...
return render_to_response('template.html',
{
'num_pages': paginator.num_pages,
'start_count': items_per_page * current_page + 1,
'end_count': (items_per_page * current_page + 1) + len(paginator(current_page).object_list)
'items_per_page': items_per_page
}
шаблон
showing {{start_count} - {{end_count}} of {{num_pages}}
(я написал этот код без преимущества компилятора, поэтому протестируйте его)
paginator = Paginator(query, settings.SEARCH_DATA_PER_PAGE)
Для количества страниц:
num_of_pages = paginator.num_pages
Для общего количества элементов на всех страницах:
num_of_objects = paginator.count
По этим данным вы можете рассчитать количество элементов на странице.
totalPages = math.ceil(float(totalRecords)/recordsPerPage)
или
paginatorInstance.num_pages # this is there by default
Разве это не так сложно?