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