Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Jinja2输出降价Frontmatter到列表_Python_Jinja2_Markdown - Fatal编程技术网

Python Jinja2输出降价Frontmatter到列表

Python Jinja2输出降价Frontmatter到列表,python,jinja2,markdown,Python,Jinja2,Markdown,我有一个降价文件文件夹。每个文件都包含一块YAML frontmatter。我试图将每个文件的frontmatter中的标题输出到一个Jinja2模板中,并在一个HTML文件中列出它们 我在没有Jinja2的情况下显示标题没有问题,但是当我试图输出到我的Jinja2模板时,它就崩溃了 下面是我正在使用的降价文件的一个示例,以及我试图列出的标题:项: --- 标题:测试 日期:2020-03-26 --- ##测试降价 下面是我正在使用的Python代码。我正在使用模块从每个降价帖子中提取fro

我有一个降价文件文件夹。每个文件都包含一块YAML frontmatter。我试图将每个文件的frontmatter中的标题输出到一个Jinja2模板中,并在一个HTML文件中列出它们

我在没有Jinja2的情况下显示标题没有问题,但是当我试图输出到我的Jinja2模板时,它就崩溃了

下面是我正在使用的降价文件的一个示例,以及我试图列出的
标题:
项:

---
标题:测试
日期:2020-03-26
---
##测试降价
下面是我正在使用的Python代码。我正在使用模块从每个降价帖子中提取frontmatter

使用frontmatter模块,选择标题并将其显示在终端上非常容易,但我无法使用Jinja2模板<代码>内容。元数据是一个命令

导入frontmatter
进口金玉2
导入glob
#初始化Jinja2:
jinja2_env=jinja2.环境(
loader=jinja2.FileSystemLoader(“模板”),
)
#获取帖子列表:
posts=glob.glob(“posts/*.md”)
def build():
以open(“test.html”、“w”、encoding=“utf-8”)作为索引文件:
在职人员:
内容=frontmatter.load(post)
#以我希望在Jinja模板中输出标题的方式将标题打印到终端:
打印(content.metadata[“title”])
#金贾产量:
template=jinja2_env.get_template(“test.html.j2”)
rendered=template.render(frontmatter=content.metadata)
index_file.write(呈现)
构建()
我的Jinja2模板如下所示:

    {键为%,frontmatter.items()中的值为%}
  • {%endfor%}
这根本不起作用,我得到一个错误:jinja2.exceptions.UndefinedError:“datetime.datetime对象”没有属性“title”。如果我删除
.title()
,那么创建的HTML文件最终会在dicts中循环,但会为每个dicts输出完整的模板:

在这里,我的Python知识已经到了极限,因此任何关于解决这一问题的帮助都将是巨大的。最后我想要的是一个HTML文件,输出每个文件的标题,如下所示:

当然,这只会向您显示一个源文件的标题,因为您将在每篇文章上循环,并将它们呈现为完全独立的模板:

for post in posts:
要呈现1个模板,请删除调用
render()
时的for循环,并将其传递给所有帖子:

rendered = template.render(
    posts=posts,
    posts_meta=[frontmatter.load(post).metadata for post in posts]
)
。。。并在模板中对其进行循环:

<ul>
{% post_meta in posts_meta %}
    <li><a href="">{{ post_meta.title }}</a></li>
{% endfor %}
</ul>
    {%post\u meta在posts\u meta%}
  • {%endfor%}

太好了,正是我想要的。我只需要为添加
,使模板循环的开始读
{%for post\u meta in posts\u meta%}
。我可能应该去更详细地阅读Jinja2文档,因为我没有意识到你可以这样做。
rendered = template.render(
    posts=posts,
    posts_meta=[frontmatter.load(post).metadata for post in posts]
)
<ul>
{% post_meta in posts_meta %}
    <li><a href="">{{ post_meta.title }}</a></li>
{% endfor %}
</ul>