mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #389 from tbunnyman/issue#380
Add support for `status: hidden` in pages
This commit is contained in:
commit
ea0a964365
9 changed files with 112 additions and 3 deletions
|
|
@ -136,6 +136,10 @@ generate static pages.
|
|||
Then, use the ``DISPLAY_PAGES_ON_MENU`` setting, which will add all the pages to
|
||||
the menu.
|
||||
|
||||
If you want to exclude any pages from being linked to or listed in the menu
|
||||
then add a ``status: hidden`` attribute to its metadata. This is useful for
|
||||
things like making error pages that fit the generated theme of your site.
|
||||
|
||||
Importing an existing blog
|
||||
--------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -357,10 +357,13 @@ class PagesGenerator(Generator):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.pages = []
|
||||
self.hidden_pages = []
|
||||
self.hidden_translations = []
|
||||
super(PagesGenerator, self).__init__(*args, **kwargs)
|
||||
|
||||
def generate_context(self):
|
||||
all_pages = []
|
||||
hidden_pages = []
|
||||
for f in self.get_files(
|
||||
os.path.join(self.path, self.settings['PAGE_DIR']),
|
||||
exclude=self.settings['PAGE_EXCLUDES']):
|
||||
|
|
@ -373,15 +376,25 @@ class PagesGenerator(Generator):
|
|||
filename=f)
|
||||
if not is_valid_content(page, f):
|
||||
continue
|
||||
all_pages.append(page)
|
||||
if page.status == "published":
|
||||
all_pages.append(page)
|
||||
elif page.status == "hidden":
|
||||
hidden_pages.append(page)
|
||||
else:
|
||||
logger.warning(u"Unknown status %s for file %s, skipping it." %
|
||||
(repr(unicode.encode(page.status, 'utf-8')),
|
||||
repr(f)))
|
||||
|
||||
|
||||
self.pages, self.translations = process_translations(all_pages)
|
||||
self.hidden_pages, self.hidden_translations = process_translations(hidden_pages)
|
||||
|
||||
self._update_context(('pages', ))
|
||||
self.context['PAGES'] = self.pages
|
||||
|
||||
def generate_output(self, writer):
|
||||
for page in chain(self.translations, self.pages):
|
||||
for page in chain(self.translations, self.pages,
|
||||
self.hidden_translations, self.hidden_pages):
|
||||
writer.write_file(page.save_as, self.get_template('page'),
|
||||
self.context, page=page,
|
||||
relative_urls=self.settings.get('RELATIVE_URLS'))
|
||||
|
|
|
|||
9
samples/content/pages/hidden_page.rst
Normal file
9
samples/content/pages/hidden_page.rst
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
This is a test hidden page
|
||||
##########################
|
||||
|
||||
:category: test
|
||||
:status: hidden
|
||||
|
||||
This is great for things like error(404) pages
|
||||
Anyone can see this page but it's not linked to anywhere!
|
||||
|
||||
8
tests/TestPages/bad_page.rst
Normal file
8
tests/TestPages/bad_page.rst
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
This is a test bad page
|
||||
#######################
|
||||
|
||||
:status: invalid
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
|
||||
The status here is invalid, the page should not render.
|
||||
8
tests/TestPages/hidden_page.rst
Normal file
8
tests/TestPages/hidden_page.rst
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
This is a test hidden page
|
||||
##########################
|
||||
|
||||
:status: hidden
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
|
||||
This page is hidden
|
||||
12
tests/TestPages/hidden_page_markdown.md
Normal file
12
tests/TestPages/hidden_page_markdown.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
title: This is a markdown test hidden page
|
||||
status: hidden
|
||||
|
||||
Test Markdown File Header
|
||||
=========================
|
||||
|
||||
Used for pelican test
|
||||
---------------------
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
|
||||
This page is hidden
|
||||
4
tests/TestPages/page.rst
Normal file
4
tests/TestPages/page.rst
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
This is a test page
|
||||
###################
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
9
tests/TestPages/page_markdown.md
Normal file
9
tests/TestPages/page_markdown.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
title: This is a markdown test page
|
||||
|
||||
Test Markdown File Header
|
||||
=========================
|
||||
|
||||
Used for pelican test
|
||||
---------------------
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
|
|
@ -4,7 +4,7 @@ from mock import MagicMock
|
|||
import os
|
||||
import re
|
||||
|
||||
from pelican.generators import ArticlesGenerator, LessCSSGenerator
|
||||
from pelican.generators import ArticlesGenerator, LessCSSGenerator, PagesGenerator
|
||||
from pelican.settings import _DEFAULT_CONFIG
|
||||
from .support import unittest, temporary_folder, skipIfNoExecutable
|
||||
|
||||
|
|
@ -94,6 +94,48 @@ class TestArticlesGenerator(unittest.TestCase):
|
|||
write.assert_called_count == 0
|
||||
|
||||
|
||||
class TestPageGenerator(unittest.TestCase):
|
||||
"""
|
||||
Every time you want to test for a new field;
|
||||
Make sure the test pages in "TestPages" have all the fields
|
||||
Add it to distilled in distill_pages_for_test
|
||||
Then update the assertItemsEqual in test_generate_context to match expected
|
||||
"""
|
||||
|
||||
def distill_pages_for_test(self, pages):
|
||||
distilled = []
|
||||
for page in pages:
|
||||
distilled.append([
|
||||
page.title,
|
||||
page.status
|
||||
]
|
||||
)
|
||||
return distilled
|
||||
|
||||
def test_generate_context(self):
|
||||
settings = _DEFAULT_CONFIG.copy()
|
||||
|
||||
settings['PAGE_DIR'] = 'TestPages'
|
||||
generator = PagesGenerator(settings.copy(), settings, CUR_DIR,
|
||||
_DEFAULT_CONFIG['THEME'], None,
|
||||
_DEFAULT_CONFIG['MARKUP'])
|
||||
generator.generate_context()
|
||||
pages = self.distill_pages_for_test(generator.pages)
|
||||
hidden_pages = self.distill_pages_for_test(generator.hidden_pages)
|
||||
|
||||
pages_expected = [
|
||||
[u'This is a test page', 'published'],
|
||||
[u'This is a markdown test page', 'published']
|
||||
]
|
||||
hidden_pages_expected = [
|
||||
[u'This is a test hidden page', 'hidden'],
|
||||
[u'This is a markdown test hidden page', 'hidden']
|
||||
]
|
||||
|
||||
self.assertItemsEqual(pages_expected,pages)
|
||||
self.assertItemsEqual(hidden_pages_expected,hidden_pages)
|
||||
|
||||
|
||||
class TestLessCSSGenerator(unittest.TestCase):
|
||||
|
||||
LESS_CONTENT = """
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue