35 lines
895 B
Python
35 lines
895 B
Python
"""
|
|
Related posts plugin for Pelican
|
|
================================
|
|
|
|
Adds related_posts variable to article's context
|
|
"""
|
|
|
|
from pelican import signals
|
|
from collections import Counter
|
|
|
|
|
|
def add_related_posts(generator):
|
|
# get the max number of entries from settings
|
|
# or fall back to default (5)
|
|
numentries = generator.settings.get('RELATED_POSTS_MAX', 5)
|
|
|
|
for article in generator.articles:
|
|
# no tag, no relation
|
|
if not hasattr(article, 'tags'):
|
|
continue
|
|
|
|
# score = number of common tags
|
|
scores = Counter()
|
|
for tag in article.tags:
|
|
scores += Counter(generator.tags[tag])
|
|
|
|
# remove itself
|
|
scores.pop(article)
|
|
|
|
article.related_posts = [other for other, count
|
|
in scores.most_common(numentries)]
|
|
|
|
|
|
def register():
|
|
signals.article_generator_finalized.connect(add_related_posts) |