MkDocs 文档生成逻辑浅析 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jpush
V2EX    Markdown

MkDocs 文档生成逻辑浅析

  •  
  •   jpush 2017-02-09 14:45:43 +08:00 3939 次点击
    这是一个创建于 3230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Markdown 和 MkDocs 简介

    Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。世界上最流行的博客平台 WordPress 和大型 CMS 如 Joomla 、 Drupal 都能很好的支持 Markdown 。

    MkDocs 是一个用于创建项目文档的快速,简单的静态站点生成器。文档源码使用 Markdown 来撰写,用一个 YAML 文件作为配置文档。

    MkDocs 处理的是一系列的 Markdown 文档,然后将 Markdown 文档的内容解析出来,保存在 Python 字典中,最后 Jinja2 模板把内容生成为 html 。

    MkDocs 如何将 Markdown 内容解析出来?又是如何将文档内容结构化的?

    Markdown 文档解析

    使用 Python-Markdown 解析文件,然后返回 html_content ,table_of_contents ,meta 。对内容做了初步的处理,从 markdown 文件,转换为 Python 相关变量。

    Python-Markdown 简介

    This is a Python implementation of John Gruber ’ s Markdown. It is almost completely compliant with the reference implementation, though there are a few very minor differences. See John ’ s Syntax Documentation for the syntax rules.

    Markdown 文档解析

    YAML 配置文件

    载入 YAML 的配置,将配置文件的内容读取为 Python 内容。

    YAML 是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。 YAML 类似于 XML ,但是语法比 XML 简单得多,对于转化成数组或可以 hash 的数据时是很简单有效的。 YAML 配置文件

    Python 字典

    获取页面内容,从 markdown 中解析的内容,存入 Python 字典中,为后续 Jinja2 的调用做准备。

    Python 字典

    Jinja2 内容生成

    载入 Jinja2 模板,结合之前抽取的内容生成 HTML 文件。 Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

    Jinja2 内容生成

    Jinja2 模板文件

    toc.html 的代码 模板文件中有之前的 Python 变量,比如 nav.item ,会被替换为对应的内容。 Jinja2 模板文件

    MkDocs 比较巧妙的实现了内容和表现的分离,虽然没有数据库,但是使用了结构化的 markdown 文件,解析为 Python 内容,然后通过 Jinja2 模板,最后生成 HTML 。

    MkDocs http://www.mkdocs.org/

    作者:不知道自己是谁(极光)

    http://www.jianshu.com/p/c9410da484fb

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     756 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 21:23 PVG 05:23 LAX 13:23 JFK 16:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86