Решил, хоть как то помочь проекту(так как установить его у меня не хватает "скила") и написать не большой рецептик.Представление:
import math
def home(request):
on_page=3 #Количество новостей на странице.
count_news=News.objects.count() # Получаем количество записей таблицы news
num_pages=int(math.ceil(float(count_news)/on_page)) # Получаем количество страниц. Делим количество записей на количество новостей на странице и округляем в большую сторону. Так как round() округляет только float мы преобразуем одно из значений
#Текущая страница из GET-параметра page
curent_page = int(request.GET.get('page') or 1)
# Если текущая страница меньше единицы, то страница равна 1
if current_pagenum_pages:
current_page=num_pages
start_from = (current_page-1) * on_page;#Начать получение данных от числа (текущая страница - 1) * количество записей на странице
news=News.objects.all()[start_from:start_from+on_page]#делаем выборку данных от:до
return render_to_response("home.html",{'news':news,'num_pages':num_pages})# возвращаем новости и количество страниц
Для того что бы сделать вывод страниц в шаблоне, сделаем небольшой шаблонный тег который будет аналогом for i in range(0,n)Для этого создадим в нашем приложении папку templatetags. В этой папке создадим файлы init.py и my_tags.pyВ my_tags.py пропишем:
from django import template
register = template.Library()
@register.filter(name='get_range')
def get_range(value):
return range(value)
Ну и наконец то в шаблон%
{% load my_tags %} # подключаем наши шаблонные теги
# Выводим содержимое news как обычно
{% for n in news %}
{{ n.title }}
{% endfor %}
# А теперь выводим номера страниц:
{% for i in num_pages|get_range %}#используем наш шаблонный тег
{{i|add:"1"}} # Добавляем 1, а то нумерация идет с 0
{% endfor %}
Updated 29 Jan. 2013, 0:16 by Arti.