Добавляем в карту сайта Django Pagination объекты

Дата публикации:3 мая 2013 г. 20:24:26

Здравствуйте! Зачем это нужно? К примеру, у вас 50 страниц идет списком. Не совсем удобно, так как объектов много и их нужно разбить хотя бы на две страницы по 25. Как это сделать вы сможете прочесть здесь. Идем дальше, у вас уже есть карта сайта? Если нет, идем сюда и делаем.

 

Теперь для примера представим, что у вас есть модель статей (Article). Есть представление, которое показывает список всех опубликованных статей и вам нужно добавить эти две-n страницы в карту сайта. Итак, открываем файл views.py (в принципе файл не имеет значения, главное сделайте все необходимые импорты) и пишем:

...

from django.core.paginator import Paginator
from django.core.urlresolvers import reverse
from django.contrib.sitemaps import Sitemap

class ArticleListSitemap(Sitemap):
    def items(self):
        articles = Article.objects.filter(published = True)
        paginator = Paginator(articles, 25)
        return paginator.page_range

    def location(self, page):
        return reverse('функция_представления_которая_выводит_список_статей', kwargs = {'page': page})
    
    def priority(self, page):
        return 1.0
    
    def lastmod(self, page):
        art = Arcticle.objects.filter(published = True)[0]
        return art.pub_date

Понятно, что фильтры условные. Просто для примера, вы вставляйте свои. Теперь добавим этот класс к текущей карте сайта:

sitemaps = {
    ...
    'articles': ArticleListSitemap(),
    ...
}

# Ну и для примера urls.py
urlpatterns = patterns('',
    ...
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
    ...
)

На этом все. Спасибо за внимание!

Метки:python, django, pagination, sitemap, карта сайта, урок