1
0
Fork 0
forked from github/pelican

Allow definition of pagination rules by page index.

This commit is contained in:
Nathan Yergler 2013-07-29 08:10:28 -04:00
commit 95890a2a61
2 changed files with 31 additions and 4 deletions

View file

@ -3,6 +3,7 @@ from __future__ import unicode_literals, print_function
import six import six
# From django.core.paginator # From django.core.paginator
from collections import namedtuple
import functools import functools
import logging import logging
import os import os
@ -11,6 +12,13 @@ from math import ceil
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
PaginationRule = namedtuple(
'PaginationRule',
'min_page URL SAVE_AS',
)
class Paginator(object): class Paginator(object):
def __init__(self, name, object_list, settings): def __init__(self, name, object_list, settings):
self.name = name self.name = name
@ -109,8 +117,16 @@ class Page(object):
"""Returns URL information as defined in settings. Similar to """Returns URL information as defined in settings. Similar to
URLWrapper._from_settings, but specialized to deal with pagination URLWrapper._from_settings, but specialized to deal with pagination
logic.""" logic."""
setting = "%s_%s" % ('PAGINATION', key)
value = self.settings[setting] rule = None
# find the last matching pagination rule
for p in self.settings['PAGINATION_PATTERNS']:
if p.min_page <= self.number:
rule = p
value = getattr(rule, key)
if not isinstance(value, six.string_types): if not isinstance(value, six.string_types):
logger.warning('%s is set to %s' % (setting, value)) logger.warning('%s is set to %s' % (setting, value))
return value return value

View file

@ -73,8 +73,9 @@ DEFAULT_CONFIG = {
'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'), 'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'),
'AUTHOR_URL': 'author/{slug}.html', 'AUTHOR_URL': 'author/{slug}.html',
'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'), 'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'),
'PAGINATION_URL': '{name}{number}.html', 'PAGINATION_PATTERNS': [
'PAGINATION_SAVE_AS': '{name}{number}.html', (0, '{name}{number}.html', '{name}{number}.html'),
],
'YEAR_ARCHIVE_SAVE_AS': False, 'YEAR_ARCHIVE_SAVE_AS': False,
'MONTH_ARCHIVE_SAVE_AS': False, 'MONTH_ARCHIVE_SAVE_AS': False,
'DAY_ARCHIVE_SAVE_AS': False, 'DAY_ARCHIVE_SAVE_AS': False,
@ -238,6 +239,16 @@ def configure_settings(settings):
'http://docs.getpelican.com/en/latest/settings.html#timezone ' 'http://docs.getpelican.com/en/latest/settings.html#timezone '
'for more information') 'for more information')
# fix up pagination rules
from pelican.paginator import PaginationRule
pagination_rules = [
PaginationRule(*r) for r in settings['PAGINATION_PATTERNS']
]
settings['PAGINATION_PATTERNS'] = sorted(
pagination_rules,
key=lambda r: r[0],
)
# Save people from accidentally setting a string rather than a list # Save people from accidentally setting a string rather than a list
path_keys = ( path_keys = (
'ARTICLE_EXCLUDES', 'ARTICLE_EXCLUDES',