如何在Pelican的文章中使用宏/变量/脚本?

时间:2017-01-31 17:45:07

标签: jinja2 pelican static-site

我刚刚开始使用Pelican。它很棒,我只是无法弄清楚如何在我的文章(和页面)中使用宏。我知道我可以在制作自己的主题时使用Jinja,但我似乎无法在文章中使用它。我希望能够定义一个宏/函数/模板/我在文章的标记中直接放置的内容,可能是参数,并且在生成页面时会扩展它。例如,生成具有给定大小和css类标题的图像的函数,该类也可以是直接链接到图像的链接。我希望能够从所有文章中访问这些宏,以便能够在任何地方重用它们。我通常会用PhP做的事情。

我可能会使用JS来做这件事,但如果我想避免它并尽可能保持一切静态。可以这样做吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

我找到了一个解决这个问题的鹈鹕插件 - jinja2content

OLD SOLUTION:

我找到了解决方案here。您可以在Python中实现一个过滤器来处理文章/页面中的所有文本,如下所示:

  1. 创建一个python文件filters.py,在其中编写过滤函数process_text以扩展我的宏(或者通常对文章/页面文本做任何事情),例如测试函数写一些东西像:

    def process_text(input_text):
      return "TEST " + input_text
    
  2. 在Pelican配置文件(pelicanconfig.py)中注册此函数作为可能与Jinja一起使用的过滤器:

    import sys
    sys.path.append('.')
    
    import filters
    JINJA_FILTERS = {'process_text':filters.process_text}
    
  3. 现在,您必须编辑模板,才能将此过滤器应用于文章/页面文本,然后再将其添加到输出中。就我而言,我编辑了两个文件:themes / themename / templates / article.html和themes / themename / templates / post.html,并将{{ article.content }}更改为{{ article.content|process_text }}{{ page.content }}更改为{{1在它们中应用过滤器。
  4. 现在文章和页面中的所有文本都应以&#34; TEST&#34;为前缀。

    关于这一点不太方便的是我必须编写自己的宏扩展器,在Python中使用正则表达式并不是很难,但是如果有更好的方法可以做到这一点,请随意发布这里。