Делаем все исходя из того что ты делаешь все через CBV. Тот мануал, что ты проходишь касается простых вью-функций.
Стоит попробовать писать как CBV так и функциональные вью.
0. Установи
django-debug-toolbar
1. Потыкайся по всем вкладкам дебуг тулбара. Это важная часть разработки
2. Пошарься по переменным, которые у тебя передаются в темплейт. Тебя заинтересуют такие переменные как object_list, post_list. Это синонимы того списка, что тебе выдал queryset.
Второе название (пост_лист) это переменная из модели из подкласса Meta
verbose_name_plural + '_' + 'list'
class PostsListView(ListView):
queryset = Post.objects.all().order_by('-datetime')
# context_object_name это та переменная о которой я говорил выше
# можно задать свое имя
# context_object_name = "car_list"
paginate_by = 10 # количество постов на страницу
доплинк
stackoverflow.com/a/5910325/1346222
замечание по поводу модели
class Post(models.Model):
title = models.CharField(max_length=255)
datetime = models.DateTimeField(u'Дата публикации')
content = models.TextField(max_length=10000)
# было
# def unicode(self):
# return self.title
# Надо
def __unicode__(self):
return self.title
# было
# def get_absolute_url(self):
# return "/blog/%i/" % self.id
# а стоит использовать всю магию джанго
# в urls.py есть вот такое
# url(r'^/blog/(?P<pk>\d+)/$', PostDetailView.as_view(), name='blog_post'),
# и можно сделать так, чтобы любое изменение urls.py было подхвачено
# в модели автоматом
# те модель сама узнает как стоит делать ссылку на блогпост
@models.permalink
def get_absolute_url(self):
return 'blog_post', (), {'pk': self.pk}
upd:
{% if is_paginated %}
<ul class="pagination">
{% if post_list.number != post_list.previous_page_number %}
<li><a href="?page={{ post_list.previous_page_number }}">←</a></li>
{% endif %}
{% for page in post_list.paginator.page_range %}
{% if page != post_list.number %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% else %}
<li class="active">{{ page }}</li>
{% endif %}
{% endfor %}
{% if post_list.number != post_list.next_page_number %}
<li><a href="?page={{ post_list.next_page_number }}">→</a></li>
{% endif %}
</ul>
{% endif %}
Вот такая конструкция
?page={{ post_list.previous_page_number }}
просто добавляет к текущему урлу ?page=
Под урлом я понимаю site.com/blog/