使用宏和变量释放mkdocs的威力
mkdocs-macros-plugin的Python项目详细描述
#mkdocs宏插件:通过变量和宏释放mkdocs的威力!--要更新,请运行以下命令:markdown toc-i readme.md-->;
<;!--toc-->;
-[概述](概述)
-[上下文和目的](上下文和目的)
*[灵感来源](灵感来源)
+[mkdocs markdownextradata(rosscdh)](mkdocs markdownextradata rosscdh)
+[jinja2:变量也可以是python可调用的](jinja2变量也可以是python可调用的)
+[wiki引擎中的宏](wiki引擎中的宏)
*[用例:克服标记语法的内在限制](用例克服标记语法的内在限制)
+[解决方案1:标记扩展](解决方案on-1-markdown-extensions)
+[解决方案2:自定义HTML代码](解决方案2-自定义HTML-code)
+[解决方案3:输入宏](解决方案3-输入宏)
-[安装](安装)
*[先决条件](先决条件)
*[过程](过程)
-[如何使用](如何使用se it)
*[在配置文件中定义变量](在配置文件中定义变量)
*[在python代码中定义变量和宏](在python代码中定义变量和宏)
*[模块位置](模块位置)
*[模块内容](模块内容)
*[在降价页面中定义本地变量和宏](在降价页面中定义本地变量和宏)
+[变量](变量)
+[宏和其他模板工具](宏和其他模板工具)
<;!--tockstop-->;
\overview
**mkdocs macros plugin**是一个插件,通过在降价代码中使用**变量**和调用**宏**,使贡献者更容易访问[mkdocs](mkdocs macros plugin)网站,使页面更丰富、更漂亮。**变量**可以通过三种方式定义:
1。全局(供贡献者使用):在"mkdocs.yml"文件中,在"extra"标题下
1。全局(对于程序员):在"main.py"文件(python)中,通过将它们添加到字典中
1。本地(供贡献者使用):在标记文件中,使用{%set variable=value%}
语句
类似地,程序员可以将**宏**定义为"main.py"文件中的python函数,用户可以在python代码中轻松使用这些函数。
使用这两个工具,您可以编写例如:
``降价
产品A的单价为{单价}欧元。
考虑到标准折扣,
50个单位的销售价格为{价格(单价,50)}欧元。
````
```
产品A的单价为10.00欧元。
考虑到标准折扣,
50个单位的售价为450.00欧元。
````
>;宏的结果可以是**html代码**:
这使得宏对于自定义扩展markdo语法特别有用。
[Jinja2模板](http://jinja.pocoo.org/docs/2.10/templates/)
/>那个前男友的想法当我看到rosschdh创建的优秀插件
[mkdocs markdownextradata](https://github.com/rosscdh/mkdocs-markdownextradata-plugin)后,我感到紧张,该插件从"mkdocs.yml"文件中获取元数据数据
,并允许您插入带有双花括号的
:
````
这个项目的价格是{{price}。
```
ja2:变量也可以是python可调用的
,然后我发现jinja2的创造者,
在他们的伟大智慧中(也要感谢他们!)",
决定支持*任何*类型的python变量,
*包括可调用的*,通常是函数,例如:
```
项目的价格是{{计算(2,7.4)}。
```
他们认为这不值得多说几句话,
但这是显而易见的钻石。
wiki引擎中的宏
>;**使用"宏"加速网页编写过程的想法实际上相当陈旧**。
大多数wiki引擎,
也依赖于某些[标记](http://wiki.c2.com/?markuplanguage)
语言在丰富页面展示方面也遇到了同样的问题,在2000年之交,
作为回应,它们常常以一种或另一种形式实现宏(在mediawiki中,它们被混淆地称为[模板](https://www.mediawiki.org/wiki/help:tem在很多情况下,这些wiki引擎依赖于双大括号语法。
页面基于标记,这在设计上很简单。缺点是降价的表现力必然是有限的。
通过网站的"mkdocs.yml"配置文件
直接激活,例如:
``yaml
markdown扩展:
-footnotes
````
(如果它们是非标准的,您只需先在
机器上安装即可。)
总是要做一些特定的事情,没有标记扩展。
或者扩展太复杂,或者不完全符合您的要求。
降价总是有点棘手,
会造成与标准语法或其他扩展不兼容。
在一些css代码中(特别是当你使用的css是特定于你的主题或网站的时候),例如:
``html
解决各种各样的问题。
但是如果您必须一次又一次地键入相同的代码,并使用一些变体;
并且如果您想更改
调用(通常是css类)的某些内容,则必须手动更改该c的
*所有*实例。ode,还有所有相关的风险。
这个解决方案不可扩展。
那个调用被转换成了正确的html?
**这是你可以教给已经写过markdo的人的。wn,不需要他们参与任何css或html!**
而且,更重要的是,
你可以*轻松*(作为程序员)用python编写你自己的新宏,
当你需要时?
简单地说,一个**宏**是一个*python函数*,它接受几个参数
并返回一个字符串。它可以包含您想要的所有逻辑;它可以像上面的示例一样简单,也可以像从数据库查询并将结果格式化为标记一样复杂。
所有这些都是可能的,这要归功于**mkdocs宏插件**!
-python版本>;3.5
-mkdocs版本>;0.17(与post 1.0版本兼容)0.17(与post 1.0版本兼容)
`````
>pip安装mkdocs宏插件的mkdocs宏插件
<>```
"手动安装lation"
要安装程序包,请下载并运行:
``python
python setup.py install
````
您的配置文件中还没有"plugins"项,
您还应该添加"search"插件。
如果未设置"plugins"项,mkdocs默认启用"search";但是如果使用它,则必须显式声明它。
配置文件中的ble要方便快捷地定义自定义变量,请在mkdocs.yml`
文件中声明它们:
``yaml
额外:
价格:12.50
公司:
名称:acme
地址:…..
网站:www.acme.com
```
你的降价文件:
``降价
产品的价格是{{{{{{{{{{{{{{{{{{{{{{{{{company.web网站}}。
<
<
>
是的python代码中的s和宏
\有道理。
如果您愿意,您可以通过在"mkdocs.yml"文件中添加
"python_module"参数来更改该模块的名称
(无需添加".py"后缀):
``yaml
``python_module:source廑code
```
声明一个名为declare_variables的钩子函数
,有两个参数:
-`variables`:将包含变量的字典。
-`macro`:一个装饰函数,可用于将python函数声明为jinja2可调用函数(mkdocs的"宏"。
示例应该是不言而喻的:
`` python
def declare_variables(variables,macro):
""
这是函数的钩子
-variables:包含变量的字典
-macro:一个decorator函数,用于声明宏。
"
变量['baz']="john doe"
@macro
def bar(x):
return(2.3*x)+7
若要导出某些预定义函数,则导入math宏(math.floor)将导出为"floor"
````
<;a class='button'href="%s">;%s<;/a>;""
返回html%(url,label)
`````
>您的**注册**of mkdocs
的变量或宏应该在
钩子函数中完成。另一方面,没有什么可以阻止您在该函数的**之外进行导入或
声明。
>;**注意:**您可以导出范围广泛的对象,并且它们的属性
保持可访问性(请参见[更多信息](http://jinja.pocoo.org/docs/2.10/templates/variables))
e`set`关键字,例如:
``jinja2
{%set acme='acme company ltd'%}
```
下面是一个宏示例,来自官方的jinja2文档:
``jinja2
{%宏输入(name,value='',type='',size=20)-%}
<;输入类型={{type}"name={name}"value={{
value}"size={{size}">;
%{endmacro%}
```
(在页面内)可以称为:
``jinja2
<;p>;{{input('username')}<;/p>;
<;p>;{{input('password',type='password')}<;/p>;
``
>;只需记住,您不需要定义任何页眉、页脚或导航,
mkdocs已经处理过了。
而且,所有定义都将保留在页面的**本地**。
<;!--toc-->;
-[概述](概述)
-[上下文和目的](上下文和目的)
*[灵感来源](灵感来源)
+[mkdocs markdownextradata(rosscdh)](mkdocs markdownextradata rosscdh)
+[jinja2:变量也可以是python可调用的](jinja2变量也可以是python可调用的)
+[wiki引擎中的宏](wiki引擎中的宏)
*[用例:克服标记语法的内在限制](用例克服标记语法的内在限制)
+[解决方案1:标记扩展](解决方案on-1-markdown-extensions)
+[解决方案2:自定义HTML代码](解决方案2-自定义HTML-code)
+[解决方案3:输入宏](解决方案3-输入宏)
-[安装](安装)
*[先决条件](先决条件)
*[过程](过程)
-[如何使用](如何使用se it)
*[在配置文件中定义变量](在配置文件中定义变量)
*[在python代码中定义变量和宏](在python代码中定义变量和宏)
*[模块位置](模块位置)
*[模块内容](模块内容)
*[在降价页面中定义本地变量和宏](在降价页面中定义本地变量和宏)
+[变量](变量)
+[宏和其他模板工具](宏和其他模板工具)
<;!--tockstop-->;
\overview
**mkdocs macros plugin**是一个插件,通过在降价代码中使用**变量**和调用**宏**,使贡献者更容易访问[mkdocs](mkdocs macros plugin)网站,使页面更丰富、更漂亮。**变量**可以通过三种方式定义:
1。全局(供贡献者使用):在"mkdocs.yml"文件中,在"extra"标题下
1。全局(对于程序员):在"main.py"文件(python)中,通过将它们添加到字典中
1。本地(供贡献者使用):在标记文件中,使用{%set variable=value%}
语句
类似地,程序员可以将**宏**定义为"main.py"文件中的python函数,用户可以在python代码中轻松使用这些函数。
使用这两个工具,您可以编写例如:
``降价
产品A的单价为{单价}欧元。
考虑到标准折扣,
50个单位的销售价格为{价格(单价,50)}欧元。
````
```
产品A的单价为10.00欧元。
考虑到标准折扣,
50个单位的售价为450.00欧元。
````
>;宏的结果可以是**html代码**:
这使得宏对于自定义扩展markdo语法特别有用。
[Jinja2模板](http://jinja.pocoo.org/docs/2.10/templates/)
/>那个前男友的想法当我看到rosschdh创建的优秀插件
[mkdocs markdownextradata](https://github.com/rosscdh/mkdocs-markdownextradata-plugin)后,我感到紧张,该插件从"mkdocs.yml"文件中获取元数据数据
,并允许您插入带有双花括号的
:
````
这个项目的价格是{{price}。
```
ja2:变量也可以是python可调用的
,然后我发现jinja2的创造者,
在他们的伟大智慧中(也要感谢他们!)",
决定支持*任何*类型的python变量,
*包括可调用的*,通常是函数,例如:
```
项目的价格是{{计算(2,7.4)}。
```
他们认为这不值得多说几句话,
但这是显而易见的钻石。
wiki引擎中的宏
>;**使用"宏"加速网页编写过程的想法实际上相当陈旧**。
大多数wiki引擎,
也依赖于某些[标记](http://wiki.c2.com/?markuplanguage)
语言在丰富页面展示方面也遇到了同样的问题,在2000年之交,
作为回应,它们常常以一种或另一种形式实现宏(在mediawiki中,它们被混淆地称为[模板](https://www.mediawiki.org/wiki/help:tem在很多情况下,这些wiki引擎依赖于双大括号语法。
页面基于标记,这在设计上很简单。缺点是降价的表现力必然是有限的。
通过网站的"mkdocs.yml"配置文件
直接激活,例如:
``yaml
markdown扩展:
-footnotes
````
(如果它们是非标准的,您只需先在
机器上安装即可。)
总是要做一些特定的事情,没有标记扩展。
或者扩展太复杂,或者不完全符合您的要求。
降价总是有点棘手,
会造成与标准语法或其他扩展不兼容。
在一些css代码中(特别是当你使用的css是特定于你的主题或网站的时候),例如:
``html
解决各种各样的问题。
但是如果您必须一次又一次地键入相同的代码,并使用一些变体;
并且如果您想更改
调用(通常是css类)的某些内容,则必须手动更改该c的
*所有*实例。ode,还有所有相关的风险。
这个解决方案不可扩展。
那个调用被转换成了正确的html?
**这是你可以教给已经写过markdo的人的。wn,不需要他们参与任何css或html!**
而且,更重要的是,
你可以*轻松*(作为程序员)用python编写你自己的新宏,
当你需要时?
简单地说,一个**宏**是一个*python函数*,它接受几个参数
并返回一个字符串。它可以包含您想要的所有逻辑;它可以像上面的示例一样简单,也可以像从数据库查询并将结果格式化为标记一样复杂。
所有这些都是可能的,这要归功于**mkdocs宏插件**!
-python版本>;3.5
-mkdocs版本>;0.17(与post 1.0版本兼容)0.17(与post 1.0版本兼容)
`````
>pip安装mkdocs宏插件的mkdocs宏插件
<>```
"手动安装lation"
要安装程序包,请下载并运行:
``python
python setup.py install
````
您的配置文件中还没有"plugins"项,
您还应该添加"search"插件。
如果未设置"plugins"项,mkdocs默认启用"search";但是如果使用它,则必须显式声明它。
配置文件中的ble要方便快捷地定义自定义变量,请在mkdocs.yml`
文件中声明它们:
``yaml
额外:
价格:12.50
公司:
名称:acme
地址:…..
网站:www.acme.com
```
你的降价文件:
``降价
产品的价格是{{{{{{{{{{{{{{{{{{{{{{{{{company.web网站}}。
<
<
>
是的python代码中的s和宏
\有道理。
如果您愿意,您可以通过在"mkdocs.yml"文件中添加
"python_module"参数来更改该模块的名称
(无需添加".py"后缀):
``yaml
``python_module:source廑code
```
声明一个名为declare_variables的钩子函数
,有两个参数:
-`variables`:将包含变量的字典。
-`macro`:一个装饰函数,可用于将python函数声明为jinja2可调用函数(mkdocs的"宏"。
示例应该是不言而喻的:
`` python
def declare_variables(variables,macro):
""
这是函数的钩子
-variables:包含变量的字典
-macro:一个decorator函数,用于声明宏。
"
变量['baz']="john doe"
@macro
def bar(x):
return(2.3*x)+7
若要导出某些预定义函数,则导入math宏(math.floor)将导出为"floor"
````
<;a class='button'href="%s">;%s<;/a>;""
返回html%(url,label)
`````
>您的**注册**of mkdocs
的变量或宏应该在
钩子函数中完成。另一方面,没有什么可以阻止您在该函数的**之外进行导入或
声明。
>;**注意:**您可以导出范围广泛的对象,并且它们的属性
保持可访问性(请参见[更多信息](http://jinja.pocoo.org/docs/2.10/templates/variables))
e`set`关键字,例如:
``jinja2
{%set acme='acme company ltd'%}
```
下面是一个宏示例,来自官方的jinja2文档:
``jinja2
{%宏输入(name,value='',type='',size=20)-%}
<;输入类型={{type}"name={name}"value={{
value}"size={{size}">;
%{endmacro%}
```
(在页面内)可以称为:
``jinja2
<;p>;{{input('username')}<;/p>;
<;p>;{{input('password',type='password')}<;/p>;
``
>;只需记住,您不需要定义任何页眉、页脚或导航,
mkdocs已经处理过了。
而且,所有定义都将保留在页面的**本地**。