使用宏和变量释放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已经处理过了。
而且,所有定义都将保留在页面的**本地**。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么我们不能将ArrayList<Integer>传递给具有(Integer…)的方法参数   java Spring RestTemplate映射JSON对映射的响应引发不匹配的PutException   在系统中找到java Selenium元素,但在Jenkins中未找到   java在Android中使用JavaMail API发送电子邮件,而不使用默认/内置应用程序   数组如何在Java数据结构中同时存储数字和相应的单词?   为什么“+”运算符未定义?JAVA   java如何在游戏中添加高分系统?   java在球门碰撞中区分球和球员   java如何使用SpringSecurity4.0.1使用Auth令牌实现Rest完整Web服务。释放   java如何解决这个错误:Android资源链接失败?   java多线程文件处理和数据库批插入   导致Tomcat失败的java无用块线程   java主线程做了太多的工作,尽管我使用了异步线程(laggy UI)   在Java FX 2.0中滚动锚定节点时,锚定始终可见?   java使用EJB3中的客户机jar和设计模式