如何获取任何 hugo markdown 页面的 frontmatter(不仅仅是 _index.md)
how to fetch the frontmatter of any hugo markdown page (not just _index.md)
我正在尝试为我的 hugo 网站编写一个短代码,以获取页面的标题参数。
我有这样的目录结构:
content
├── workshops
│ ├── foo
│ │ └── _index.md
│ ├── bar.md
这非常有效:
{{ with .Site.GetPage "home" "workshops/foo"}}
{{ .Params.Title }}
{{ end }}
而且这个总是空白(即使降价中有标题)。
{{ with .Site.GetPage "home" "workshops/bar"}}
{{ .Params.Title }}
{{ end }}
我的问题是:如何获得独立页面的标题?
我已经尝试了很多不同的组合,但我就是做错了。我已经尝试阅读文档,但在这一点上它们非常令人费解。
我有办法!我写了一些 Python3.7 脚本来创建目录并移动和重命名 markdown 文件,然后 运行 它覆盖我的整个内容目录。这解决了我的问题,但有点麻烦...
import logging
import os
from pathlib import Path
def fixup(path):
location = Path(path)
assert location.is_dir(), location
for child in location.iterdir():
if child.is_dir():
fixup(child)
else:
fix_file(child)
def fix_file(file_path):
name = file_path.name
if not name.endswith(".md"):
# we only care about markdown files.
return
check_metadata(file_path)
if name.startswith("_index."):
# looks good
return
# make a directory with the same name as the file (without the extension)
suffix = ''.join(file_path.suffixes)
prefix = name[: -len(suffix)]
new_dir = file_path.parent / prefix
new_dir.mkdir()
new_path = new_dir / f"_index{suffix}"
file_path.rename(new_path)
def check_metadata(file_path):
""" given the path to a markdown file, make sure that the frontmatter includes
the required metadata
"""
# TODO
# required = ['title']
# allowed = ['pre', 'weight', 'ready']
if __name__ == '__main__':
fixup('content')
两个不同点:
- 使用全局站点变量
- 只需将页面名称作为参数传递
{{ with site.GetPage "workshops/bar" }}
{{ .Title }}
{{ end }}
我正在尝试为我的 hugo 网站编写一个短代码,以获取页面的标题参数。
我有这样的目录结构:
content
├── workshops
│ ├── foo
│ │ └── _index.md
│ ├── bar.md
这非常有效:
{{ with .Site.GetPage "home" "workshops/foo"}}
{{ .Params.Title }}
{{ end }}
而且这个总是空白(即使降价中有标题)。
{{ with .Site.GetPage "home" "workshops/bar"}}
{{ .Params.Title }}
{{ end }}
我的问题是:如何获得独立页面的标题?
我已经尝试了很多不同的组合,但我就是做错了。我已经尝试阅读文档,但在这一点上它们非常令人费解。
我有办法!我写了一些 Python3.7 脚本来创建目录并移动和重命名 markdown 文件,然后 运行 它覆盖我的整个内容目录。这解决了我的问题,但有点麻烦...
import logging
import os
from pathlib import Path
def fixup(path):
location = Path(path)
assert location.is_dir(), location
for child in location.iterdir():
if child.is_dir():
fixup(child)
else:
fix_file(child)
def fix_file(file_path):
name = file_path.name
if not name.endswith(".md"):
# we only care about markdown files.
return
check_metadata(file_path)
if name.startswith("_index."):
# looks good
return
# make a directory with the same name as the file (without the extension)
suffix = ''.join(file_path.suffixes)
prefix = name[: -len(suffix)]
new_dir = file_path.parent / prefix
new_dir.mkdir()
new_path = new_dir / f"_index{suffix}"
file_path.rename(new_path)
def check_metadata(file_path):
""" given the path to a markdown file, make sure that the frontmatter includes
the required metadata
"""
# TODO
# required = ['title']
# allowed = ['pre', 'weight', 'ready']
if __name__ == '__main__':
fixup('content')
两个不同点:
- 使用全局站点变量
- 只需将页面名称作为参数传递
{{ with site.GetPage "workshops/bar" }}
{{ .Title }}
{{ end }}