如何使用mkdocs将.md文件自动添加到输出html文件中?

2024-05-23 23:46:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是能够创建get自动添加到使用mkdocs创建的html页面的内容。博客就是一个例子

解决方案可能需要将.md文件放入

  1. 同一文件夹
  2. 按年份、月份和日期列出的子文件夹
  3. 按年份和月份列出子文件夹

它应该自动将文件夹(可能还有子文件夹)中的每个.md文件添加到生成的html中。对我来说,最好的解决方案是自动将以下内容添加到导航菜单(上面的选项3):

mkdocs.yml
docs/
  blog/
    2020/
      01/
        05.md
        22.md
        30.md
      03/
        01.md
        08.md

所需的输出将是html页面中标题(2020/01/05、2020/01/22等)的树状表示,带有页面链接,或者是遵循类似树状结构的导航菜单项。也欢迎提出其他建议。主要的一点是让这个过程自动化;无需在每次添加.md文件时创建其他页面或mkdocs.yml的条目

我选中了mkdocs-blog,但它缺少文档,并且mkdocs-blog-plugin,但在配置之后,导航面板中没有显示任何内容,并且它使用了次优的文件结构(选项2)

我正在寻找能够提供实现上述目标的最简单/最佳方法的清晰说明


Tags: 文件文件夹内容目标ymlhtml选项blog
1条回答
网友
1楼 · 发布于 2024-05-23 23:46:24

我决定再看一眼mkdocs-blog,并找到了一种方法来完成我所需要的。把它写在这里,以防将来对某人有所帮助

一,。安装mkdocs博客

在编写本文时,mkdocs-blog不在pip上,因此需要从git安装它。例如,使用:

pip install git+https://github.com/andyoakley/mkdocs-blog

或者下载文件夹并运行pip install <folder_with_setu.py>

二,。所需的文件夹结构

所需的文件夹结构,至少在v.0.1.0中。是YYYY/mm,年份文件夹应直接位于docs下方。忽略任何其他文件夹和文件。每月文件夹中的文件可以以任何方式命名。例如:

.
├── docs
│   ├── 2020
│   │   ├── 06
│   │   │   └── 05.md
│   │   └── 07
│   │       ├── 22.md
│   │       └── 23.md
│   ├── other_folder
│   ├── third_folder
│   ├── some.md
│   ├── another.md
│   └── index.md
└── mkdocs.yml

三,。在页面上列出最近的3个

代码取自mkdocs-blog/tree/master/tests/test_data/docs/recent.md,有一个小改动1。它使用Jinja2模板语言。文件按修改日期排序

# Most recent

{% for p in config['ordered'][-3:] | reverse %}
  {% set page = p[0] %}
  {% set mtime = p[3] %}
  <a href="{{ page.url }}">
  {{ page.file.url[:-5] }}
  </a>
  <br />
{% endfor %}

四,。列出归档文件

代码取自mkdocs-blog/tree/master/tests/test_data/docs/archive.md,有一个小改动1。它使用Jinja2模板语言。文件按修改日期排序

# Archives 
(**Note:** sorted by file edit date)

{% set chronological = config['chronological'] %}

{% for year in chronological|sort(reverse=True) %}
  <h3>{{ year | strftime("%Y") }}</h3>
  {% for month in chronological[year] %}
    <h4>{{ month | strftime("%B")  }}</h4>
    {% for mtime in chronological[year][month]|sort(reverse=True) %}
      {% set page = chronological[year][month][mtime] %}
      <a href="/{{ page.url }}">{{ page.file.url[:-5]}}</a>
      <br />
    {% endfor %}
  {% endfor %}

{% endfor %}   

1所需的小变化:出于某种原因,{}没有{}(甚至{})。我发布了一期here。因此,

{{ page.title }}

我需要使用

{{ page.file.url[:-5] }}

{{ page.file.url[:-5].split('/')[-1] }}

这使得链接成为文件名

相关问题 更多 >