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

问题描述 投票:0回答:1

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

我可能可以使用 JS 来做到这一点,但如果我想避免它并尽可能保持所有内容静态。这可以吗?

jinja2 pelican static-site
1个回答
1
投票

更新:

我找到了一个 Pelican 插件可以解决这个问题 - jinja2content


旧解决方案:

我找到了解决方案这里。您可以在 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 }}
    更改为
    {{ page.content|process_text }}
    以应用过滤器.

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

不太方便的事情是我必须编写自己的宏扩展器,这对于 Python 中的正则表达式来说应该不是非常困难,但如果有更好的方法来做到这一点,请随时在此处发布。

© www.soinside.com 2019 - 2024. All rights reserved.