我想为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。非常感谢您的帮助。
答案 0 :(得分:1)
答案取决于您使用的MkDocs版本。在#1376中,路径已作为属性config.config_file_path
添加到配置对象。但是,直到下一个版本(1.0),该功能才可用。无论如何,早期版本都包含一个未记录的config option config['config_file_path']
,该文件保存着文件的位置。但是请小心,因为任何未记录的功能如有更改,恕不另行通知。
关于Markdown文件的位置,在传递给插件事件的various attributes对象的page中可用。您可以选择page.input_path
,page.output_path
,page.abs_input_path
和page.abs_output_path
。同样,这些没有文档记录,并且在将来的版本中如有更改,恕不另行通知。实际上,{1.0}建议将#1504更改为page.file.src_path
,page.file.dest_path
,page.file.abs_src_path
和page.file.abs_dest_path
。但这是使用1.0之前的软件的风险。随着开发人员试图使其正确,事情发生了变化。好消息是1.0版将锁定这些功能。
完全公开:我是MkDocs开发团队的成员。