我有一个降价文件文件夹。每个文件都包含一块YAML frontmatter。我试图将每个文件的frontmatter中的标题输出到一个Jinja2模板中,并在一个HTML文件中列出它们
我在没有Jinja2的情况下显示标题没有问题,但是当我试图输出到我的Jinja2模板时,它就崩溃了
下面是我正在处理的标记文件的一个示例,以及我试图列出的title:
项:
---
title: Test
date: 2020-03-26
---
## Test Markdown
下面是我正在使用的Python代码。我正在使用python-frontmatter模块从每个降价帖子中提取frontmatter
使用frontmatter模块,选择标题并将其显示在终端上非常容易,但我无法使用Jinja2模板content.metadata
是一条格言
import frontmatter
import jinja2
import glob
# Initialise Jinja2:
jinja2_env = jinja2.Environment(
loader=jinja2.FileSystemLoader("templates"),
)
# Get list of posts:
posts = glob.glob("posts/*.md")
def build():
with open("test.html", "w", encoding="utf-8") as index_file:
for post in posts:
content = frontmatter.load(post)
# Prints titles to the terminal the way I want to output them in the Jinja template:
print(content.metadata["title"])
# Jinja output:
template = jinja2_env.get_template("test.html.j2")
rendered = template.render(frontmatter=content.metadata)
index_file.write(rendered)
build()
我的Jinja2模板如下所示:
<ul>
{% for key, value in frontmatter.items() %}
<li><a href="">{{ value.title() }}</a></li>
{% endfor %}
</ul>
这根本不起作用,我得到一个错误jinja2.exceptions.UndefinedError: 'datetime.datetime object' has no attribute 'title'
。如果我删除.title()
,那么创建的HTML文件最终会在DICT中循环,但会输出每个DICT的完整模板:
<ul>
<li><a href="">Test Title 1</a></li>
<li><a href="">2020-10-21 10:00:20</a></li>
</ul><ul>
<li><a href="">Test Title 2</a></li>
<li><a href="">2019-06-09 17:42:12</a></li>
</ul><ul>
<li><a href="">Test Title 3</a></li>
<li><a href="">2019-06-09 17:42:12</a></li>
</ul>
在这里,我的Python知识已经到了极限,因此任何关于解决这一问题的帮助都将是巨大的。最后我想要的是一个HTML文件,输出每个文件的标题,如下所示:
<ul>
<li><a href="">Test Title 1</a></li>
<li><a href="">Test Title 2</a></li>
<li><a href="">Test Title 3</a></li>
</ul>
这是错误的。正如错误消息所说,您正在对datetime对象调用
title()
(您的date
前端事务)您的循环正在前面的每个
key
(标题,然后是日期)以及value
上迭代当然,这只会向您显示一个源文件的标题,因为您将在每篇文章上循环,并将它们呈现为完全独立的模板:
您希望呈现1模板,因此请删除对
render()
的调用周围的for循环,并将其传递给所有帖子:。。。并在模板中对其进行循环:
相关问题 更多 >
编程相关推荐