1
0
Fork 0
forked from github/pelican

Merge pull request #1401 from arty-name/PAGINATION_FIXED

Support last page pattern in PAGINATION_PATTERNS
This commit is contained in:
Justin Mayer 2021-01-14 10:51:00 +01:00 committed by GitHub
commit 5971c5ad90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 2 deletions

View file

@ -1067,6 +1067,11 @@ as follows::
)
If you want a pattern to apply to the last page in the list, use ``-1``
as the ``minimum_page`` value::
(-1, '{base_name}/last/', '{base_name}/last/index.html'),
Translations
============

View file

@ -118,8 +118,13 @@ class Page:
# find the last matching pagination rule
for p in self.settings['PAGINATION_PATTERNS']:
if p.min_page <= self.number:
rule = p
if p.min_page == -1:
if not self.has_next():
rule = p
break
else:
if p.min_page <= self.number:
rule = p
if not rule:
return ''

View file

@ -76,3 +76,29 @@ class TestPage(unittest.TestCase):
page2 = paginator.page(2)
self.assertEqual(page2.save_as, 'blog/2/index.html')
self.assertEqual(page2.url, '//blog.my.site/2/')
def test_custom_pagination_pattern_last_page(self):
from pelican.paginator import PaginationRule
settings = get_settings()
settings['PAGINATION_PATTERNS'] = [PaginationRule(*r) for r in [
(1, '/{url}1/', '{base_name}/1/index.html'),
(2, '/{url}{number}/', '{base_name}/{number}/index.html'),
(-1, '/{url}', '{base_name}/index.html'),
]]
self.page_kwargs['metadata']['author'] = Author('Blogger', settings)
object_list = [Article(**self.page_kwargs),
Article(**self.page_kwargs),
Article(**self.page_kwargs)]
paginator = Paginator('blog/index.html', '//blog.my.site/',
object_list, settings, 1)
# The URL *has to* stay absolute (with // in the front), so verify that
page1 = paginator.page(1)
self.assertEqual(page1.save_as, 'blog/1/index.html')
self.assertEqual(page1.url, '//blog.my.site/1/')
page2 = paginator.page(2)
self.assertEqual(page2.save_as, 'blog/2/index.html')
self.assertEqual(page2.url, '//blog.my.site/2/')
page3 = paginator.page(3)
self.assertEqual(page3.save_as, 'blog/index.html')
self.assertEqual(page3.url, '//blog.my.site/')