功能实现很简单, pelican也有类似的插件实现 https://github.com/getpelican/pelican-plugins/tree/master/neighbors
不过自己实现起来更爽不是吗? 而且类似prev_article_in_category和prev_article_in_subcategory的功能我并不需要
首先参考pelican的文档,基础实现
def add_neighbors(generator):
....
def register():
signals.article_generator_finalized.connect(add_neighbors)
然后在generator.articles列表上进行操作,为article增加previous_article和next_article对象
先进行排序(按时间)
articles = generator.articles articles.sort(key=(lambda x: x.date), reverse=True)
然后可以使用iter关键字,把列表变成生成器,使用next()( python2用a.next(),python3用a.__next__())获取下一个可迭代对象
pre_article = None
articles_iter = iter(articles[1:])
for article in articles:
next_article = next(articles_iter, None)
setattr(article, 'previous_article', pre_article)
setattr(article, 'next_article', next_article)
pre_article = article
最后,在模板template中增加相关html代码,示例:
{% if article.previous_article %}
<li class="previous">
<a href="{{ SITEURL }}/{{ article.previous_article.url }}" title="Previous article: {{ article.previous_article.title }}">
<i class="fa fa-chevron-left"></i>
{{ article.previous_article.title }}
</a>
</li>
{% endif %}
{% if article.next_article %}
<li class="next">
<a href="{{ SITEURL }}/{{ article.next_article.url }}" title="Next article: {{ article.previous_article.title }}">
{{ article.next_article.title }}
<i class="fa fa-chevron-right"></i>
</a>
</li>
{% endif %}
ok,就这样