代码之家  ›  专栏  ›  技术社区  ›  fralau

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

  •  0
  • fralau  · 技术社区  · 6 年前

    我想为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文件的位置,或者标记文件的位置。无论如何,那会是 config 字典?

    更新

    我写了这个插件 made it available on github 是的。非常感谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Waylan    6 年前

    答案取决于您使用的mkdocs版本。在 #1376 路径已作为属性添加到配置对象中 config.config_file_path 是的。不过,要等到下一个版本才能使用( 1.0 )中。不管怎样,早期的版本包括 config option config['config_file_path'] 它保存文件的位置。但是,请小心,因为任何未记录的功能都可能在未经通知的情况下更改。

    至于标记文件的位置,可以在 various attributes page 对象传递给插件事件。你有你的选择 page.input_path ,请 page.output_path 我是说, page.abs_input_path ,和 page.abs_output_path 是的。同样,这些都是未经记录的,在未来的版本中可能会发生更改,恕不另行通知。事实上, #1504 建议将其更改为 page.file.src_path 我是说, page.file.dest_path ,请 page.file.abs_src_path ,和 page.file.abs_dest_path 对于1.0版本。但这就是使用1.0之前的软件的风险所在。随着开发人员的努力,事情发生了变化。好消息是1.0版本将锁定这些东西。

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

    推荐文章