我如何在 Pelican 的文章中使用 macros/variables/scripts?

How can I use macros/variables/scripts in articles with Pelican?

我刚开始使用 Pelican。太棒了,我只是不知道如何在我的文章(和页面)中使用宏。我知道我在制作自己的主题时可以使用Jinja,但我似乎无法在文章中使用它。我希望能够定义一个 macro/function/template/whatever 直接放在文章的降价中,可能带有参数,并且在生成页面时它会被扩展。例如,生成具有给定大小和 css class 标题的图像的函数也将是 link 直接指向图像。我希望能够从所有文章中访问这些宏,以便能够在任何地方重用它们。我通常会用 PhP.

做的事情

我可能会使用 JS 来执行此操作,但如果我想避免它并尽可能使所有内容保持静态。这能做到吗?

更新:

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


旧解决方案:

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

  1. 创建一个 python 文件 filters.py,在其中编写过滤器函数 process_text 以扩展我的宏(或者通常使用 article/page 文本),例如要测试函数,请编写如下内容:

    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. 现在您必须编辑模板以将此过滤器应用于 article/page 文本,然后再将它们添加到输出。就我而言,我编辑了两个文件:themes/themename/templates/article.html 和 themes/themename/templates/post.html 并将 {{ article.content }} 更改为 {{ article.content|process_text }}{{ page.content }}{{ page.content|process_text }} 以应用过滤器。

现在文章和页面中的所有文本都应以 "TEST" 为前缀。

不太方便的是我必须编写自己的宏扩展器,在 Python 中用正则表达式应该不会太难,但是如果有更好的方法来做到这一点,欢迎在此处 post。