我刚刚开始使用 Pelican。太棒了,我只是不知道如何在我的文章(和页面)中使用宏。我知道我可以在制作自己的主题时使用 Jinja,但我似乎无法在文章中使用它。我希望能够定义一个宏/函数/模板/任何我直接放入文章降价中的内容,可能带有参数,并且在生成页面时它会得到扩展。例如,生成具有给定大小和 css 类标题的图像的函数,该图像也可以直接链接到图像。我希望能够从所有文章中访问这些宏,以便能够在任何地方重用它们。我通常会用 PhP 做的事情。
我可能可以使用 JS 来做到这一点,但如果我想避免它并尽可能保持所有内容静态。这可以吗?
更新:
我找到了一个 Pelican 插件可以解决这个问题 - jinja2content。
旧解决方案:
我找到了解决方案这里。您可以在 Python 中实现一个过滤器来处理文章/页面中的所有文本,如下所示:
创建一个Python文件filters.py,在其中编写过滤器函数
process_text
来扩展我的宏(或者通常对文章/页面文本执行任何操作),例如要测试该函数,请编写如下内容:
def process_text(input_text):
return "TEST " + input_text
在 Pelican 配置文件 (pelicanconfig.py) 中,将此函数注册为与 Jinja 一起使用的可能过滤器:
import sys
sys.path.append('.')
import filters
JINJA_FILTERS = {'process_text':filters.process_text}
现在您必须编辑模板以将此过滤器应用于文章/页面文本,然后再将其添加到输出。在我的例子中,我编辑了两个文件:themes/themename/templates/article.html和themes/themename/templates/post.html并将其中的
{{ article.content }}
更改为{{ article.content|process_text }}
和{{ page.content }}
更改为{{ page.content|process_text }}
以应用过滤器.
现在文章和页面中的所有文本都应以“TEST”为前缀。
不太方便的事情是我必须编写自己的宏扩展器,这对于 Python 中的正则表达式来说应该不是非常困难,但如果有更好的方法来做到这一点,请随时在此处发布。