mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
move {ARTICLE,PAGE}_DIR -> {ARTICLE,PAGE}_PATHS and correlate with {ARTICLE,PAGE}_EXCLUDES
821 lines
52 KiB
ReStructuredText
821 lines
52 KiB
ReStructuredText
Settings
|
|
########
|
|
|
|
Pelican is configurable thanks to a settings file you can pass to
|
|
the command line::
|
|
|
|
pelican content -s path/to/your/settingsfile.py
|
|
|
|
(If you used the ``pelican-quickstart`` command, your primary settings file will
|
|
be named ``pelicanconf.py`` by default.)
|
|
|
|
Settings are configured in the form of a Python module (a file). There is an
|
|
`example settings file
|
|
<https://github.com/getpelican/pelican/raw/master/samples/pelican.conf.py>`_
|
|
available for reference.
|
|
|
|
All the setting identifiers must be set in all-caps, otherwise they will not be
|
|
processed. Setting values that are numbers (5, 20, etc.), booleans (True,
|
|
False, None, etc.), dictionaries, or tuples should *not* be enclosed in
|
|
quotation marks. All other values (i.e., strings) *must* be enclosed in
|
|
quotation marks.
|
|
|
|
Unless otherwise specified, settings that refer to paths can be either absolute
|
|
or relative to the configuration file.
|
|
|
|
The settings you define in the configuration file will be passed to the
|
|
templates, which allows you to use your settings to add site-wide content.
|
|
|
|
Here is a list of settings for Pelican:
|
|
|
|
Basic settings
|
|
==============
|
|
|
|
=============================================================================== =====================================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
=============================================================================== =====================================================================
|
|
``AUTHOR`` Default author (put your name)
|
|
``DATE_FORMATS = {}`` If you manage multiple languages, you can set the date formatting
|
|
here. See the "Date format and locale" section below for details.
|
|
``USE_FOLDER_AS_CATEGORY = True`` When you don't specify a category in your post metadata, set this
|
|
setting to ``True``, and organize your articles in subfolders, the
|
|
subfolder will become the category of your post. If set to ``False``,
|
|
``DEFAULT_CATEGORY`` will be used as a fallback.
|
|
``DEFAULT_CATEGORY = 'misc'`` The default category to fall back on.
|
|
``DEFAULT_DATE_FORMAT = '%a %d %B %Y'`` The default date format you want to use.
|
|
``DISPLAY_PAGES_ON_MENU = True`` Whether to display pages on the menu of the
|
|
template. Templates may or may not honor this
|
|
setting.
|
|
``DISPLAY_CATEGORIES_ON_MENU = True`` Whether to display categories on the menu of the
|
|
template. Templates may or not honor this
|
|
setting.
|
|
``DEFAULT_DATE = None`` The default date you want to use.
|
|
If ``fs``, Pelican will use the file system
|
|
timestamp information (mtime) if it can't get
|
|
date information from the metadata.
|
|
If set to a tuple object, the default datetime object will instead
|
|
be generated by passing the tuple to the
|
|
``datetime.datetime`` constructor.
|
|
``DEFAULT_METADATA = ()`` The default metadata you want to use for all articles
|
|
and pages.
|
|
``FILENAME_METADATA =`` ``'(?P<date>\d{4}-\d{2}-\d{2}).*'`` The regexp that will be used to extract any metadata
|
|
from the filename. All named groups that are matched
|
|
will be set in the metadata object.
|
|
The default value will only extract the date from
|
|
the filename.
|
|
For example, if you would like to extract both the
|
|
date and the slug, you could set something like:
|
|
``'(?P<date>\d{4}-\d{2}-\d{2})_(?P<slug>.*)'``.
|
|
See :ref:`path_metadata`.
|
|
``PATH_METADATA = ''`` Like ``FILENAME_METADATA``, but parsed from a page's
|
|
full path relative to the content source directory.
|
|
See :ref:`path_metadata`.
|
|
``EXTRA_PATH_METADATA = {}`` Extra metadata dictionaries keyed by relative path.
|
|
See :ref:`path_metadata`.
|
|
``DELETE_OUTPUT_DIRECTORY = False`` Delete the output directory, and **all** of its contents, before
|
|
generating new files. This can be useful in preventing older,
|
|
unnecessary files from persisting in your output. However, **this is
|
|
a destructive setting and should be handled with extreme care.**
|
|
``OUTPUT_RETENTION = ()`` A tuple of filenames that should be retained and not deleted from the
|
|
output directory. One use case would be the preservation of version
|
|
control data. For example: ``(".hg", ".git", ".bzr")``
|
|
``JINJA_EXTENSIONS = []`` A list of any Jinja2 extensions you want to use.
|
|
``JINJA_FILTERS = {}`` A list of custom Jinja2 filters you want to use.
|
|
The dictionary should map the filtername to the filter function.
|
|
For example: ``{'urlencode': urlencode_filter}``
|
|
See `Jinja custom filters documentation`_.
|
|
``LOCALE`` [#]_ Change the locale. A list of locales can be provided
|
|
here or a single string representing one locale.
|
|
When providing a list, all the locales will be tried
|
|
until one works.
|
|
``LOG_FILTER = []`` A list of tuples containing the logging level (up to ``warning``)
|
|
and the message to be ignored.
|
|
For example: ``[(logging.WARN, 'TAG_SAVE_AS is set to False')]``
|
|
``READERS = {}`` A dictionary of file extensions / Reader classes for Pelican to
|
|
process or ignore. For example, to avoid processing .html files,
|
|
set: ``READERS = {'html': None}``. To add a custom reader for the
|
|
``foo`` extension, set: ``READERS = {'foo': FooReader}``
|
|
``IGNORE_FILES = ['.#*']`` A list of file globbing patterns to match against the
|
|
source files to be ignored by the processor. For example,
|
|
the default ``['.#*']`` will ignore emacs lock files.
|
|
``MD_EXTENSIONS =`` ``['codehilite(css_class=highlight)','extra']`` A list of the extensions that the Markdown processor
|
|
will use. Refer to the Python Markdown documentation's
|
|
`Extensions section <http://pythonhosted.org/Markdown/extensions/>`_
|
|
for a complete list of supported extensions. (Note that
|
|
defining this in your settings file will override and
|
|
replace the default values. If your goal is to *add*
|
|
to the default values for this setting, you'll need to
|
|
include them explicitly and enumerate the full list of
|
|
desired Markdown extensions.)
|
|
``OUTPUT_PATH = 'output/'`` Where to output the generated files.
|
|
``PATH`` Path to content directory to be processed by Pelican. If undefined,
|
|
and content path is not specified via an argument to the ``pelican``
|
|
command, Pelican will use the current working directory.
|
|
``PAGE_PATHS = ['pages']`` A list of directories to look at for pages, relative to ``PATH``.
|
|
``PAGE_EXCLUDES = []`` A list of directories to exclude when looking for pages in addition
|
|
to ``ARTICLE_PATHS``.
|
|
``ARTICLE_PATHS = ['']`` A list of directories to look at for articles, relative to ``PATH``.
|
|
``ARTICLE_EXCLUDES = []`` A list of directories to exclude when looking for articles in addition
|
|
to ``PAGE_PATHS``.
|
|
``OUTPUT_SOURCES = False`` Set to True if you want to copy the articles and pages in their
|
|
original format (e.g. Markdown or reStructuredText) to the
|
|
specified ``OUTPUT_PATH``.
|
|
``OUTPUT_SOURCES_EXTENSION = '.text'`` Controls the extension that will be used by the SourcesGenerator.
|
|
Defaults to ``.text``. If not a valid string the default value
|
|
will be used.
|
|
``RELATIVE_URLS = False`` Defines whether Pelican should use document-relative URLs or
|
|
not. Only set this to ``True`` when developing/testing and only
|
|
if you fully understand the effect it can have on links/feeds.
|
|
``PLUGINS = []`` The list of plugins to load. See :ref:`plugins`.
|
|
``PLUGIN_PATHS = []`` A list of directories where to look for plugins. See :ref:`plugins`.
|
|
``SITENAME = 'A Pelican Blog'`` Your site name
|
|
``SITEURL`` Base URL of your website. Not defined by default,
|
|
so it is best to specify your SITEURL; if you do not, feeds
|
|
will not be generated with properly-formed URLs. You should
|
|
include ``http://`` and your domain, with no trailing
|
|
slash at the end. Example: ``SITEURL = 'http://mydomain.com'``
|
|
``TEMPLATE_PAGES = None`` A mapping containing template pages that will be rendered with
|
|
the blog entries. See :ref:`template_pages`.
|
|
``STATIC_PATHS = ['images']`` The static paths you want to have accessible
|
|
on the output path "static". By default,
|
|
Pelican will copy the "images" folder to the
|
|
output folder.
|
|
``TIMEZONE`` The timezone used in the date information, to
|
|
generate Atom and RSS feeds. See the *Timezone*
|
|
section below for more info.
|
|
``TYPOGRIFY = False`` If set to True, several typographical improvements will be
|
|
incorporated into the generated HTML via the `Typogrify
|
|
<https://pypi.python.org/pypi/typogrify>`_ library,
|
|
which can be installed via: ``pip install typogrify``
|
|
``DIRECT_TEMPLATES =`` ``('index', 'categories', 'authors', 'archives')`` List of templates that are used directly to render
|
|
content. Typically direct templates are used to generate
|
|
index pages for collections of content (e.g., tags and
|
|
category index pages). If the tag and category collections
|
|
are not needed, set ``DIRECT_TEMPLATES = ('index', 'archives')``
|
|
``PAGINATED_DIRECT_TEMPLATES = ('index',)`` Provides the direct templates that should be paginated.
|
|
``SUMMARY_MAX_LENGTH = 50`` When creating a short summary of an article, this will
|
|
be the default length (measured in words) of the text created.
|
|
This only applies if your content does not otherwise
|
|
specify a summary. Setting to ``None`` will cause the summary
|
|
to be a copy of the original content.
|
|
``EXTRA_TEMPLATES_PATHS = []`` A list of paths you want Jinja2 to search for templates.
|
|
Can be used to separate templates from the theme.
|
|
Example: projects, resume, profile ...
|
|
These templates need to use ``DIRECT_TEMPLATES`` setting.
|
|
``WITH_FUTURE_DATES = True`` If disabled, content with dates in the future will get a default
|
|
status of ``draft``. See :ref:`reading_only_modified_content`
|
|
for caveats.
|
|
``INTRASITE_LINK_REGEX = '[{|](?P<what>.*?)[|}]'`` Regular expression that is used to parse internal links. Default
|
|
syntax when linking to internal files, tags, etc., is to enclose
|
|
the identifier, say ``filename``, in ``{}`` or ``||``. Identifier
|
|
between ``{`` and ``}`` goes into the ``what`` capturing group.
|
|
For details see :ref:`ref-linking-to-internal-content`.
|
|
``PYGMENTS_RST_OPTIONS = []`` A list of default Pygments settings for your reStructuredText
|
|
code blocks. See :ref:`internal_pygments_options` for a list of
|
|
supported options.
|
|
``SLUGIFY_SOURCE = 'input'`` Specifies where you want the slug to be automatically generated
|
|
from. Can be set to ``title`` to use the 'Title:' metadata tag or
|
|
``basename`` to use the article's basename when creating the slug.
|
|
``CACHE_CONTENT = True`` If ``True``, save content in a cache file.
|
|
See :ref:`reading_only_modified_content` for details about caching.
|
|
``CONTENT_CACHING_LAYER = 'reader'`` If set to ``'reader'``, save only the raw content and metadata
|
|
returned by readers. If set to ``'generator'``, save processed
|
|
content objects.
|
|
``CACHE_PATH = 'cache'`` Directory in which to store cache files.
|
|
``GZIP_CACHE = True`` If ``True``, use gzip to (de)compress the cache files.
|
|
``CHECK_MODIFIED_METHOD = 'mtime'`` Controls how files are checked for modifications.
|
|
``LOAD_CONTENT_CACHE = True`` If ``True``, load unmodified content from cache.
|
|
``AUTORELOAD_IGNORE_CACHE = False`` If ``True``, do not load content cache in autoreload mode
|
|
when the settings file changes.
|
|
``WRITE_SELECTED = []`` If this list is not empty, **only** output files with their paths
|
|
in this list are written. Paths should be either absolute or relative
|
|
to the current Pelican working directory. For possible use cases see
|
|
:ref:`writing_only_selected_content`.
|
|
=============================================================================== =====================================================================
|
|
|
|
.. [#] Default is the system locale.
|
|
|
|
|
|
URL settings
|
|
------------
|
|
|
|
The first thing to understand is that there are currently two supported methods
|
|
for URL formation: *relative* and *absolute*. Relative URLs are useful
|
|
when testing locally, and absolute URLs are reliable and most useful when
|
|
publishing. One method of supporting both is to have one Pelican configuration
|
|
file for local development and another for publishing. To see an example of this
|
|
type of setup, use the ``pelican-quickstart`` script as described in the
|
|
:doc:`Installation <install>` section, which will produce two separate
|
|
configuration files for local development and publishing, respectively.
|
|
|
|
You can customize the URLs and locations where files will be saved. The
|
|
``*_URL`` and ``*_SAVE_AS`` variables use Python's format strings. These
|
|
variables allow you to place your articles in a location such as
|
|
``{slug}/index.html`` and link to them as ``{slug}`` for clean URLs. These
|
|
settings give you the flexibility to place your articles and pages anywhere you
|
|
want.
|
|
|
|
.. note::
|
|
If you specify a ``datetime`` directive, it will be substituted using the
|
|
input files' date metadata attribute. If the date is not specified for a
|
|
particular file, Pelican will rely on the file's ``mtime`` timestamp.
|
|
Check the `Python datetime documentation`_ for more information.
|
|
|
|
.. _Python datetime documentation:
|
|
http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
|
|
|
|
Also, you can use other file metadata attributes as well:
|
|
|
|
* slug
|
|
* date
|
|
* lang
|
|
* author
|
|
* category
|
|
|
|
Example usage:
|
|
|
|
* ``ARTICLE_URL = 'posts/{date:%Y}/{date:%b}/{date:%d}/{slug}/'``
|
|
* ``ARTICLE_SAVE_AS = 'posts/{date:%Y}/{date:%b}/{date:%d}/{slug}/index.html'``
|
|
|
|
This would save your articles in something like ``/posts/2011/Aug/07/sample-post/index.html``,
|
|
and the URL to this would be ``/posts/2011/Aug/07/sample-post/``.
|
|
|
|
Pelican can optionally create per-year, per-month, and per-day archives of your
|
|
posts. These secondary archives are disabled by default but are automatically
|
|
enabled if you supply format strings for their respective ``_SAVE_AS`` settings.
|
|
Period archives fit intuitively with the hierarchical model of web URLs and can
|
|
make it easier for readers to navigate through the posts you've written over time.
|
|
|
|
Example usage:
|
|
|
|
* ``YEAR_ARCHIVE_SAVE_AS = 'posts/{date:%Y}/index.html'``
|
|
* ``MONTH_ARCHIVE_SAVE_AS = 'posts/{date:%Y}/{date:%b}/index.html'``
|
|
|
|
With these settings, Pelican will create an archive of all your posts for the
|
|
year at (for instance) ``posts/2011/index.html`` and an archive of all your
|
|
posts for the month at ``posts/2011/Aug/index.html``.
|
|
|
|
.. note::
|
|
Period archives work best when the final path segment is ``index.html``.
|
|
This way a reader can remove a portion of your URL and automatically
|
|
arrive at an appropriate archive of posts, without having to specify
|
|
a page name.
|
|
|
|
====================================================== ========================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
====================================================== ========================================================
|
|
``ARTICLE_URL = '{slug}.html'`` The URL to refer to an article.
|
|
``ARTICLE_SAVE_AS = '{slug}.html'`` The place where we will save an article.
|
|
``ARTICLE_LANG_URL = '{slug}-{lang}.html'`` The URL to refer to an article which doesn't use the
|
|
default language.
|
|
``ARTICLE_LANG_SAVE_AS = '{slug}-{lang}.html'`` The place where we will save an article which
|
|
doesn't use the default language.
|
|
``DRAFT_URL = 'drafts/{slug}.html'`` The URL to refer to an article draft.
|
|
``DRAFT_SAVE_AS = 'drafts/{slug}.html'`` The place where we will save an article draft.
|
|
``DRAFT_LANG_URL = 'drafts/{slug}-{lang}.html'`` The URL to refer to an article draft which doesn't
|
|
use the default language.
|
|
``DRAFT_LANG_SAVE_AS = 'drafts/{slug}-{lang}.html'`` The place where we will save an article draft which
|
|
doesn't use the default language.
|
|
``PAGE_URL = 'pages/{slug}.html'`` The URL we will use to link to a page.
|
|
``PAGE_SAVE_AS = 'pages/{slug}.html'`` The location we will save the page. This value has to be
|
|
the same as PAGE_URL or you need to use a rewrite in
|
|
your server config.
|
|
``PAGE_LANG_URL = 'pages/{slug}-{lang}.html'`` The URL we will use to link to a page which doesn't
|
|
use the default language.
|
|
``PAGE_LANG_SAVE_AS = 'pages/{slug}-{lang}.html'`` The location we will save the page which doesn't
|
|
use the default language.
|
|
``CATEGORY_URL = 'category/{slug}.html'`` The URL to use for a category.
|
|
``CATEGORY_SAVE_AS = 'category/{slug}.html'`` The location to save a category.
|
|
``TAG_URL = 'tag/{slug}.html'`` The URL to use for a tag.
|
|
``TAG_SAVE_AS = 'tag/{slug}.html'`` The location to save the tag page.
|
|
``AUTHOR_URL = 'author/{slug}.html'`` The URL to use for an author.
|
|
``AUTHOR_SAVE_AS = 'author/{slug}.html'`` The location to save an author.
|
|
``YEAR_ARCHIVE_SAVE_AS = ''`` The location to save per-year archives of your posts.
|
|
``MONTH_ARCHIVE_SAVE_AS = ''`` The location to save per-month archives of your posts.
|
|
``DAY_ARCHIVE_SAVE_AS = ''`` The location to save per-day archives of your posts.
|
|
``SLUG_SUBSTITUTIONS` = ()`` Substitutions to make prior to stripping out
|
|
non-alphanumerics when generating slugs. Specified
|
|
as a list of 2-tuples of ``(from, to)`` which are
|
|
applied in order.
|
|
====================================================== ========================================================
|
|
|
|
.. note::
|
|
|
|
If you do not want one or more of the default pages to be created (e.g.,
|
|
you are the only author on your site and thus do not need an Authors page),
|
|
set the corresponding ``*_SAVE_AS`` setting to ``''`` to prevent the
|
|
relevant page from being generated.
|
|
|
|
``DIRECT_TEMPLATES``, which are ``('index', 'tags', 'categories', 'archives')``
|
|
by default, work a bit differently than noted above. Only the ``_SAVE_AS``
|
|
settings are available:
|
|
|
|
============================================= ===============================================
|
|
Setting name (followed by default value) What does it do?
|
|
============================================= ===============================================
|
|
``ARCHIVES_SAVE_AS = 'archives.html'`` The location to save the article archives page.
|
|
``AUTHORS_SAVE_AS = 'authors.html'`` The location to save the author list.
|
|
``CATEGORIES_SAVE_AS = 'categories.html'`` The location to save the category list.
|
|
``TAGS_SAVE_AS = 'tags.html'`` The location to save the tag list.
|
|
============================================= ===============================================
|
|
|
|
URLs for direct template pages are theme-dependent. Some themes hard-code them:
|
|
``'archives.html'``, ``'authors.html'``, ``'categories.html'``, ``'tags.html'``.
|
|
|
|
Timezone
|
|
--------
|
|
|
|
If no timezone is defined, UTC is assumed. This means that the generated Atom
|
|
and RSS feeds will contain incorrect date information if your locale is not UTC.
|
|
|
|
Pelican issues a warning in case this setting is not defined, as it was not
|
|
mandatory in previous versions.
|
|
|
|
Have a look at `the wikipedia page`_ to get a list of valid timezone values.
|
|
|
|
.. _the wikipedia page: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
|
|
|
|
Date format and locale
|
|
----------------------
|
|
|
|
If no ``DATE_FORMATS`` are set, Pelican will fall back to
|
|
``DEFAULT_DATE_FORMAT``. If you need to maintain multiple languages with
|
|
different date formats, you can set the ``DATE_FORMATS`` dictionary using the
|
|
language name (``lang`` metadata in your post content) as the key. Regarding
|
|
available format codes, see `strftime document of python`_ :
|
|
|
|
.. parsed-literal::
|
|
|
|
DATE_FORMATS = {
|
|
'en': '%a, %d %b %Y',
|
|
'jp': '%Y-%m-%d(%a)',
|
|
}
|
|
|
|
You can set locale to further control date format:
|
|
|
|
.. parsed-literal::
|
|
|
|
LOCALE = ('usa', 'jpn', # On Windows
|
|
'en_US', 'ja_JP' # On Unix/Linux
|
|
)
|
|
|
|
Also, it is possible to set different locale settings for each language. If you
|
|
put (locale, format) tuples in the dict, this will override the ``LOCALE``
|
|
setting above:
|
|
|
|
.. parsed-literal::
|
|
# On Unix/Linux
|
|
DATE_FORMATS = {
|
|
'en': ('en_US','%a, %d %b %Y'),
|
|
'jp': ('ja_JP','%Y-%m-%d(%a)'),
|
|
}
|
|
|
|
# On Windows
|
|
DATE_FORMATS = {
|
|
'en': ('usa','%a, %d %b %Y'),
|
|
'jp': ('jpn','%Y-%m-%d(%a)'),
|
|
}
|
|
|
|
This is a list of available `locales on Windows`_ . On Unix/Linux, usually you
|
|
can get a list of available locales via the ``locale -a`` command; see manpage
|
|
`locale(1)`_ for more information.
|
|
|
|
|
|
.. _strftime document of python: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
|
|
|
.. _locales on Windows: http://msdn.microsoft.com/en-us/library/cdax410z%28VS.71%29.aspx
|
|
|
|
.. _locale(1): http://linux.die.net/man/1/locale
|
|
|
|
|
|
.. _template_pages:
|
|
|
|
Template pages
|
|
==============
|
|
|
|
If you want to generate custom pages besides your blog entries, you can point
|
|
any Jinja2 template file with a path pointing to the file and the destination
|
|
path for the generated file.
|
|
|
|
For instance, if you have a blog with three static pages — a list of books,
|
|
your resume, and a contact page — you could have::
|
|
|
|
TEMPLATE_PAGES = {'src/books.html': 'dest/books.html',
|
|
'src/resume.html': 'dest/resume.html',
|
|
'src/contact.html': 'dest/contact.html'}
|
|
|
|
|
|
.. _path_metadata:
|
|
|
|
Path metadata
|
|
=============
|
|
|
|
Not all metadata needs to be `embedded in source file itself`__. For
|
|
example, blog posts are often named following a ``YYYY-MM-DD-SLUG.rst``
|
|
pattern, or nested into ``YYYY/MM/DD-SLUG`` directories. To extract
|
|
metadata from the filename or path, set ``FILENAME_METADATA`` or
|
|
``PATH_METADATA`` to regular expressions that use Python's `group name
|
|
notation`_ ``(?P<name>…)``. If you want to attach additional metadata
|
|
but don't want to encode it in the path, you can set
|
|
``EXTRA_PATH_METADATA``:
|
|
|
|
.. parsed-literal::
|
|
|
|
EXTRA_PATH_METADATA = {
|
|
'relative/path/to/file-1': {
|
|
'key-1a': 'value-1a',
|
|
'key-1b': 'value-1b',
|
|
},
|
|
'relative/path/to/file-2': {
|
|
'key-2': 'value-2',
|
|
},
|
|
}
|
|
|
|
This can be a convenient way to shift the installed location of a
|
|
particular file:
|
|
|
|
.. parsed-literal::
|
|
|
|
# Take advantage of the following defaults
|
|
# STATIC_SAVE_AS = '{path}'
|
|
# STATIC_URL = '{path}'
|
|
STATIC_PATHS = [
|
|
'extra/robots.txt',
|
|
]
|
|
EXTRA_PATH_METADATA = {
|
|
'extra/robots.txt': {'path': 'robots.txt'},
|
|
}
|
|
|
|
__ internal_metadata__
|
|
.. _group name notation:
|
|
http://docs.python.org/3/library/re.html#regular-expression-syntax
|
|
|
|
Feed settings
|
|
=============
|
|
|
|
By default, Pelican uses Atom feeds. However, it is also possible to use RSS
|
|
feeds if you prefer.
|
|
|
|
Pelican generates category feeds as well as feeds for all your articles. It does
|
|
not generate feeds for tags by default, but it is possible to do so using
|
|
the ``TAG_FEED_ATOM`` and ``TAG_FEED_RSS`` settings:
|
|
|
|
================================================= =====================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
================================================= =====================================================
|
|
``FEED_DOMAIN = None``, i.e. base URL is "/" The domain prepended to feed URLs. Since feed URLs
|
|
should always be absolute, it is highly recommended
|
|
to define this (e.g., "http://feeds.example.com"). If
|
|
you have already explicitly defined SITEURL (see
|
|
above) and want to use the same domain for your
|
|
feeds, you can just set: ``FEED_DOMAIN = SITEURL``.
|
|
``FEED_ATOM = None``, i.e. no Atom feed Relative URL to output the Atom feed.
|
|
``FEED_RSS = None``, i.e. no RSS Relative URL to output the RSS feed.
|
|
``FEED_ALL_ATOM = 'feeds/all.atom.xml'`` Relative URL to output the all-posts Atom feed:
|
|
this feed will contain all posts regardless of their
|
|
language.
|
|
``FEED_ALL_RSS = None``, i.e. no all-posts RSS Relative URL to output the all-posts RSS feed:
|
|
this feed will contain all posts regardless of their
|
|
language.
|
|
``CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'`` [2]_ Where to put the category Atom feeds.
|
|
``CATEGORY_FEED_RSS = None``, i.e. no RSS Where to put the category RSS feeds.
|
|
``AUTHOR_FEED_ATOM = 'feeds/%s.atom.xml'`` [2]_ Where to put the author Atom feeds.
|
|
``AUTHOR_FEED_RSS = 'feeds/%s.rss.xml'`` [2]_ Where to put the author RSS feeds.
|
|
``TAG_FEED_ATOM = None``, i.e. no tag feed Relative URL to output the tag Atom feed. It should
|
|
be defined using a "%s" match in the tag name.
|
|
``TAG_FEED_RSS = None``, i.e. no RSS tag feed Relative URL to output the tag RSS feed
|
|
``FEED_MAX_ITEMS`` Maximum number of items allowed in a feed. Feed item
|
|
quantity is unrestricted by default.
|
|
================================================= =====================================================
|
|
|
|
If you don't want to generate some or any of these feeds, set the above variables to ``None``.
|
|
|
|
.. [2] %s is the name of the category.
|
|
|
|
FeedBurner
|
|
----------
|
|
|
|
If you want to use FeedBurner for your feed, you will likely need to decide
|
|
upon a unique identifier. For example, if your site were called "Thyme" and
|
|
hosted on the www.example.com domain, you might use "thymefeeds" as your
|
|
unique identifier, which we'll use throughout this section for illustrative
|
|
purposes. In your Pelican settings, set the ``FEED_ATOM`` attribute to
|
|
``thymefeeds/main.xml`` to create an Atom feed with an original address of
|
|
``http://www.example.com/thymefeeds/main.xml``. Set the ``FEED_DOMAIN``
|
|
attribute to ``http://feeds.feedburner.com``, or ``http://feeds.example.com`` if
|
|
you are using a CNAME on your own domain (i.e., FeedBurner's "MyBrand" feature).
|
|
|
|
There are two fields to configure in the `FeedBurner
|
|
<http://feedburner.google.com>`_ interface: "Original Feed" and "Feed
|
|
Address". In this example, the "Original Feed" would be
|
|
``http://www.example.com/thymefeeds/main.xml`` and the "Feed Address" suffix
|
|
would be ``thymefeeds/main.xml``.
|
|
|
|
Pagination
|
|
==========
|
|
|
|
The default behaviour of Pelican is to list all the article titles along
|
|
with a short description on the index page. While this works well for
|
|
small-to-medium sites, sites with a large quantity of articles will probably
|
|
benefit from paginating this list.
|
|
|
|
You can use the following settings to configure the pagination.
|
|
|
|
================================================ =====================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
================================================ =====================================================
|
|
``DEFAULT_ORPHANS = 0`` The minimum number of articles allowed on the
|
|
last page. Use this when you don't want the last page
|
|
to only contain a handful of articles.
|
|
``DEFAULT_PAGINATION = False`` The maximum number of articles to include on a
|
|
page, not including orphans. False to disable
|
|
pagination.
|
|
``PAGINATION_PATTERNS`` A set of patterns that are used to determine advanced
|
|
pagination output.
|
|
================================================ =====================================================
|
|
|
|
Using Pagination Patterns
|
|
-------------------------
|
|
|
|
The ``PAGINATION_PATTERNS`` setting can be used to configure where
|
|
subsequent pages are created. The setting is a sequence of three
|
|
element tuples, where each tuple consists of::
|
|
|
|
(minimum page, URL setting, SAVE_AS setting,)
|
|
|
|
For example, if you wanted the first page to just be ``/``, and the
|
|
second (and subsequent) pages to be ``/page/2/``, you would set
|
|
``PAGINATION_PATTERNS`` as follows::
|
|
|
|
PAGINATION_PATTERNS = (
|
|
(1, '{base_name}/', '{base_name}/index.html'),
|
|
(2, '{base_name}/page/{number}/', '{base_name}/page/{number}/index.html'),
|
|
)
|
|
|
|
This would cause the first page to be written to
|
|
``{base_name}/index.html``, and subsequent ones would be written into
|
|
``page/{number}`` directories.
|
|
|
|
Tag cloud
|
|
=========
|
|
|
|
If you want to generate a tag cloud with all your tags, you can do so using the
|
|
following settings.
|
|
|
|
================================================ =====================================================
|
|
Setting name (followed by default value) What does it do?
|
|
================================================ =====================================================
|
|
``TAG_CLOUD_STEPS = 4`` Count of different font sizes in the tag
|
|
cloud.
|
|
``TAG_CLOUD_MAX_ITEMS = 100`` Maximum number of tags in the cloud.
|
|
================================================ =====================================================
|
|
|
|
The default theme does not include a tag cloud, but it is pretty easy to add one::
|
|
|
|
<ul class="tagcloud">
|
|
{% for tag in tag_cloud %}
|
|
<li class="tag-{{ tag.1 }}"><a href="{{ SITEURL }}/{{ tag.0.url }}">{{ tag.0 }}</a></li>
|
|
{% endfor %}
|
|
</ul>
|
|
|
|
You should then also define CSS styles with appropriate classes (tag-1 to tag-N,
|
|
where N matches ``TAG_CLOUD_STEPS``), tag-1 being the most frequent, and
|
|
define a ``ul.tagcloud`` class with appropriate list-style to create the cloud.
|
|
For example::
|
|
|
|
ul.tagcloud {
|
|
list-style: none;
|
|
padding: 0;
|
|
}
|
|
|
|
ul.tagcloud li {
|
|
display: inline-block;
|
|
}
|
|
|
|
li.tag-1 {
|
|
font-size: 150%;
|
|
}
|
|
|
|
li.tag-2 {
|
|
font-size: 120%;
|
|
}
|
|
|
|
...
|
|
|
|
Translations
|
|
============
|
|
|
|
Pelican offers a way to translate articles. See the :doc:`Content <content>` section for
|
|
more information.
|
|
|
|
======================================================== =====================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
======================================================== =====================================================
|
|
``DEFAULT_LANG = 'en'`` The default language to use.
|
|
``TRANSLATION_FEED_ATOM = 'feeds/all-%s.atom.xml'`` [3]_ Where to put the Atom feed for translations.
|
|
``TRANSLATION_FEED_RSS = None``, i.e. no RSS Where to put the RSS feed for translations.
|
|
======================================================== =====================================================
|
|
|
|
.. [3] %s is the language
|
|
|
|
Ordering content
|
|
================
|
|
|
|
================================================ =====================================================
|
|
Setting name (followed by default value) What does it do?
|
|
================================================ =====================================================
|
|
``NEWEST_FIRST_ARCHIVES = True`` Order archives by newest first by date. (False:
|
|
orders by date with older articles first.)
|
|
``REVERSE_CATEGORY_ORDER = False`` Reverse the category order. (True: lists by reverse
|
|
alphabetical order; default lists alphabetically.)
|
|
================================================ =====================================================
|
|
|
|
Themes
|
|
======
|
|
|
|
Creating Pelican themes is addressed in a dedicated section (see :ref:`theming-pelican`).
|
|
However, here are the settings that are related to themes.
|
|
|
|
================================================ =====================================================
|
|
Setting name (followed by default value, if any) What does it do?
|
|
================================================ =====================================================
|
|
``THEME`` Theme to use to produce the output. Can be a relative
|
|
or absolute path to a theme folder, or the name of a
|
|
default theme or a theme installed via
|
|
``pelican-themes`` (see below).
|
|
``THEME_STATIC_DIR = 'theme'`` Destination directory in the output path where
|
|
Pelican will place the files collected from
|
|
`THEME_STATIC_PATHS`. Default is `theme`.
|
|
``THEME_STATIC_PATHS = ['static']`` Static theme paths you want to copy. Default
|
|
value is `static`, but if your theme has
|
|
other static paths, you can put them here. If files
|
|
or directories with the same names are included in
|
|
the paths defined in this settings, they will be
|
|
progressively overwritten.
|
|
``CSS_FILE = 'main.css'`` Specify the CSS file you want to load.
|
|
================================================ =====================================================
|
|
|
|
|
|
By default, two themes are available. You can specify them using the ``THEME``
|
|
setting or by passing the ``-t`` option to the ``pelican`` command:
|
|
|
|
* notmyidea
|
|
* simple (a synonym for "plain text" :)
|
|
|
|
There are a number of other themes available at https://github.com/getpelican/pelican-themes.
|
|
Pelican comes with :doc:`pelican-themes`, a small script for managing themes.
|
|
|
|
You can define your own theme, either by starting from scratch or by duplicating
|
|
and modifying a pre-existing theme. Here is :doc:`a guide on how to create your theme <themes>`.
|
|
|
|
Following are example ways to specify your preferred theme::
|
|
|
|
# Specify name of a built-in theme
|
|
THEME = "notmyidea"
|
|
# Specify name of a theme installed via the pelican-themes tool
|
|
THEME = "chunk"
|
|
# Specify a customized theme, via path relative to the settings file
|
|
THEME = "themes/mycustomtheme"
|
|
# Specify a customized theme, via absolute path
|
|
THEME = "/home/myuser/projects/mysite/themes/mycustomtheme"
|
|
|
|
The built-in ``notmyidea`` theme can make good use of the following settings. Feel
|
|
free to use them in your themes as well.
|
|
|
|
======================= =======================================================
|
|
Setting name What does it do?
|
|
======================= =======================================================
|
|
``SITESUBTITLE`` A subtitle to appear in the header.
|
|
``DISQUS_SITENAME`` Pelican can handle Disqus comments. Specify the
|
|
Disqus sitename identifier here.
|
|
``GITHUB_URL`` Your GitHub URL (if you have one). It will then
|
|
use this information to create a GitHub ribbon.
|
|
``GOOGLE_ANALYTICS`` Set to 'UA-XXXX-YYYY' to activate Google Analytics.
|
|
``GOSQUARED_SITENAME`` Set to 'XXX-YYYYYY-X' to activate GoSquared.
|
|
``MENUITEMS`` A list of tuples (Title, URL) for additional menu
|
|
items to appear at the beginning of the main menu.
|
|
``PIWIK_URL`` URL to your Piwik server - without 'http://' at the
|
|
beginning.
|
|
``PIWIK_SSL_URL`` If the SSL-URL differs from the normal Piwik-URL
|
|
you have to include this setting too. (optional)
|
|
``PIWIK_SITE_ID`` ID for the monitored website. You can find the ID
|
|
in the Piwik admin interface > Settings > Websites.
|
|
``LINKS`` A list of tuples (Title, URL) for links to appear on
|
|
the header.
|
|
``SOCIAL`` A list of tuples (Title, URL) to appear in the
|
|
"social" section.
|
|
``TWITTER_USERNAME`` Allows for adding a button to articles to encourage
|
|
others to tweet about them. Add your Twitter username
|
|
if you want this button to appear.
|
|
======================= =======================================================
|
|
|
|
In addition, you can use the "wide" version of the ``notmyidea`` theme by
|
|
adding the following to your configuration::
|
|
|
|
CSS_FILE = "wide.css"
|
|
|
|
Logging
|
|
=======
|
|
|
|
Sometimes, a long list of warnings may appear during site generation. Finding
|
|
the **meaningful** error message in the middle of tons of annoying log output
|
|
can be quite tricky. In order to filter out redundant log messages, Pelican
|
|
comes with the ``LOG_FILTER`` setting.
|
|
|
|
``LOG_FILTER`` should be a list of tuples ``(level, msg)``, each of them being
|
|
composed of the logging level (up to ``warning``) and the message to be ignored.
|
|
Simply populate the list with the log messages you want to hide, and they will
|
|
be filtered out.
|
|
|
|
For example: ``[(logging.WARN, 'TAG_SAVE_AS is set to False')]``
|
|
|
|
.. _reading_only_modified_content:
|
|
|
|
Reading only modified content
|
|
=============================
|
|
|
|
To speed up the build process, Pelican can optionally read only articles
|
|
and pages with modified content.
|
|
|
|
When Pelican is about to read some content source file:
|
|
|
|
1. The hash or modification time information for the file from a
|
|
previous build are loaded from a cache file if ``LOAD_CONTENT_CACHE``
|
|
is ``True``. These files are stored in the ``CACHE_PATH``
|
|
directory. If the file has no record in the cache file, it is read
|
|
as usual.
|
|
2. The file is checked according to ``CHECK_MODIFIED_METHOD``:
|
|
|
|
- If set to ``'mtime'``, the modification time of the file is
|
|
checked.
|
|
- If set to a name of a function provided by the ``hashlib``
|
|
module, e.g. ``'md5'``, the file hash is checked.
|
|
- If set to anything else or the necessary information about the
|
|
file cannot be found in the cache file, the content is read as
|
|
usual.
|
|
|
|
3. If the file is considered unchanged, the content data saved in a
|
|
previous build corresponding to the file is loaded from the cache,
|
|
and the file is not read.
|
|
4. If the file is considered changed, the file is read and the new
|
|
modification information and the content data are saved to the
|
|
cache if ``CACHE_CONTENT`` is ``True``.
|
|
|
|
If ``CONTENT_CACHING_LAYER`` is set to ``'reader'`` (the default),
|
|
the raw content and metadata returned by a reader are cached. If this
|
|
setting is instead set to ``'generator'``, the processed content
|
|
object is cached. Caching the processed content object may conflict
|
|
with plugins (as some reading related signals may be skipped) and the
|
|
``WITH_FUTURE_DATES`` functionality (as the ``draft`` status of the
|
|
cached content objects would not change automatically over time).
|
|
|
|
Checking modification times is faster than comparing file hashes,
|
|
but it is not as reliable because ``mtime`` information can be lost,
|
|
e.g., when copying content source files using the ``cp`` or ``rsync``
|
|
commands without the ``mtime`` preservation mode (which for ``rsync``
|
|
can be invoked by passing the ``--archive`` flag).
|
|
|
|
The cache files are Python pickles, so they may not be readable by
|
|
different versions of Python as the pickle format often changes. If
|
|
such an error is encountered, the cache files have to be rebuilt by
|
|
removing them and re-running Pelican, or by using the Pelican
|
|
command-line option ``--ignore-cache``. The cache files also have to
|
|
be rebuilt when changing the ``GZIP_CACHE`` setting for cache file
|
|
reading to work properly.
|
|
|
|
The ``--ignore-cache`` command-line option is also useful when the
|
|
whole cache needs to be regenerated, such as when making modifications
|
|
to the settings file that will affect the cached content, or just for
|
|
debugging purposes. When Pelican runs in autoreload mode, modification
|
|
of the settings file will make it ignore the cache automatically if
|
|
``AUTORELOAD_IGNORE_CACHE`` is ``True``.
|
|
|
|
Note that even when using cached content, all output is always
|
|
written, so the modification times of the generated ``*.html`` files
|
|
will always change. Therefore, ``rsync``-based uploading may benefit
|
|
from the ``--checksum`` option.
|
|
|
|
.. _writing_only_selected_content:
|
|
|
|
Writing only selected content
|
|
=============================
|
|
|
|
When only working on a single article or page, or making tweaks to
|
|
your theme, it is often desirable to generate and review your work
|
|
as quickly as possible. In such cases, generating and writing the
|
|
entire site output is often unnecessary. By specifying only the
|
|
desired files as output paths in the ``WRITE_SELECTED`` list,
|
|
**only** those files will be written. This list can be also specified
|
|
on the command line using the ``--write-selected`` option, which
|
|
accepts a comma-separated list of output file paths. By default this
|
|
list is empty, so all output is written.
|
|
|
|
Example settings
|
|
================
|
|
|
|
.. literalinclude:: ../samples/pelican.conf.py
|
|
:language: python
|
|
|
|
|
|
.. _Jinja custom filters documentation: http://jinja.pocoo.org/docs/api/#custom-filters
|