mkdocs:使用自定义python模块补充插件

时间:2018-06-24 18:14:20

标签: python mkdocs

我想为mkdocs编写一个插件,该插件可以添加自定义python代码的文件。 这是example of plugin

我想将该模块放在mkdocs.yml文件旁边的网站主目录中,并在其中声明该模块,例如:

python_module=mycode.py

然后我将在插件的代码中使用类似

的代码:
from mkdocs.plugins import BasePlugin

from jinja2 import Template
import importlib

class MarkdownExtraDataPlugin(BasePlugin):
    "Execute piece of code"

    def on_page_markdown(self, markdown, page, config, site_navigation, **kwargs):

        python_module = config.get('python_module')

        if python_module:
            # Add path, here is the question:
            python_module = os.path.join(*?????*, python_module)

            # do import here:
            importlib.import_module(python_module)

        ....
        return result

我现在遇到的问题是我不知道模块的代码如何知道yaml文件的位置或markdown文件的位置。有机会成为config词典的一部分吗?

更新

我写了插件和made it available on github。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

答案取决于您使用的MkDocs版本。在#1376中,路径已作为属性config.config_file_path添加到配置对象。但是,直到下一个版本(1.0),该功能才可用。无论如何,早期版本都包含一个未记录的config option config['config_file_path'],该文件保存着文件的位置。但是请小心,因为任何未记录的功能如有更改,恕不另行通知。

关于Markdown文件的位置,在传递给插件事件的various attributes对象的page中可用。您可以选择page.input_pathpage.output_pathpage.abs_input_pathpage.abs_output_path。同样,这些没有文档记录,并且在将来的版本中如有更改,恕不另行通知。实际上,{1.0}建议将#1504更改为page.file.src_pathpage.file.dest_pathpage.file.abs_src_pathpage.file.abs_dest_path。但这是使用1.0之前的软件的风险。随着开发人员试图使其正确,事情发生了变化。好消息是1.0版将锁定这些功能。

完全公开:我是MkDocs开发团队的成员。