pelican官方文档没有显式的指明应该如何自定义jinja template filters.

在制作标签云的时候,不想写复杂的javascript,更不想又import一份javascript进来,所以决定自己搞一个比较简单的标签云

pelican默认的tag排序比较简单,为了能有比较“云”的感觉,决定对tag加个随机排序

查了Jinja的文档,没有随机排序的filter。由于我使用了virtualenv,所以最简单粗暴的解决方案是直接修改了Jinja的源码,添加了随机排序的功能

不过对于稍微有些“洁癖”的好,这样改后,心理上非常难受,决定到pelican社区,看看是否有幸添加个patch

当然,更幸运的是在github找到了此commit:

https://github.com/getpelican/pelican/pull/96

原来有个JINJA_FILTERS的设置,那一切就好办了, 增加自定义模块jinja_filters.py

import random

def shuffle( value ):
    """ Jinja template filter for shuffling list/tuple """
    if not isinstance( value, list
            ) and not isinstance( value, tuple ):
        return value
    random.shuffle( value )
    return value

pelican配置文件里填加:

from jinja_filters import shuffle

JINJA_FILTERS = { 'shuffle' : shuffle }

尝试重新编译生成html文件,顺利完成。

您可能还喜欢以下文章

关于老树

就职于网易在线游戏事业部,任系统运维工程师职位,负责公司部份基础服务及MMORPG、WEBGAME、手游等的运维工作;喜欢折腾Unix/Linux、开源技术、互联网产品。
VPS 使用 vultr,欢迎使用我的 referral link,我可以得到少许返利。

相关评论

comments powered by Disqus