[Pelican] Get Single Page or Article by slug Metadata in Theme


Sometimes we want to get a single page or article by some metadata in theme. This post shows how to use a custom Jinja2 filter to get a single page or article by slug metadata in the theme.

First, add the following filter code in your pelicanconf.py:

# custom Jinja2 filter
def get_by_slug(objs, slug):
    for obj in objs:
        if obj.slug == slug:
            return obj

JINJA_FILTERS = {
    "get_by_slug": get_by_slug,
}

Then you can use the custom filter to select the page or article you need in the theme. For example, you can use as follows in index.html:

{% set intro = (pages|get_by_slug("introduction")) %}
{% set hello = (articles|get_by_slug("hello-world")) %}

<div>Title of page: {{ intro.title }}</div>
<div>Title of article: {{ hello.title }}</div>

Tested on: Ubuntu Linux 16.10, Python 2.7.12+, Pelican 3.7.0.


References:

[1]new arch: FIXME: URL issue · siongui/shenfang@33b9932 · GitHub