Lektor插件,用于限制查询创建的依赖项
lektor-limit-dependencies的Python项目详细描述
勒克托极限依赖关系
这是一个实验性的Lektor插件,旨在提供工具(或者, 至少,一个工具)来帮助保持Lektor的依赖性跟踪 控制。在
简介
激励示例
假设您想列出最近的三篇博客文章 在Lektor网站的侧边栏中。这可以通过添加 类似于网站基本模板:
<h3>Recent Posts</h3><ul>{%forpostinsite.query('/blog').order_by('-pub_date').limit(3)%}<li><ahref="{{post|url}}">{{post.title}}</a></li>{%endfor%}</ul>
然而,这并非没有缺点。对post查询排序依据 date,Lektor遍历all的博客文章,然后进行排序 他们。在这样做时,它将所有博客帖子记录为依赖项 ,该页面上使用了最近的post查询。如果这个 在站点上每个页面的侧边栏中,现在 无论何时,只要有任何博客文章(不仅仅是 最近的三篇文章)已编辑。在
从技术上讲,现在所有的页面都依赖于所有的帖子。你呢
很可能会编辑一篇旧文章的pub_date
,这样
它现在应该出现在最近的列表中。然而,事实并非如此
对于任何帖子的any编辑,所有页面都需要重新生成。
不幸的是,Lektor的依赖性跟踪系统并不详细
足以表达how页面的详细信息
依赖于其他页;它只记录它们是
所以莱克托别无选择只能重建一切。在
解决方案?
这个插件引入了一个Jinja过滤器limit_dependencies
。它
需要一个Lektor查询实例作为输入。它遍历
输入查询,并返回一个新的查询实例,该实例将生成
同样的结果。当它进行迭代时,它,本质上,
猴子修补莱克托的依赖性跟踪机制,以防止它
从记录任何依赖关系。在
最后,limit_dependencies
记录了对virtual
source object的一个依赖关系,它只依赖于标识的序列
查询结果中记录的。(Lektor提供了一种方法
虚拟源对象可以报告校验和。如果他们这样做
依赖跟踪机制记录这些校验和,并将
如果校验和发生更改,则触发重建。Limit_dependencies
生成其校验和依赖于
查询结果中的序列标识。)
在上面的例子中,这正是我们想要的。我们只想
如果最近三个
发布更改。(或者如果他们的名字有变化。注意这个
也会被覆盖,因为在
在{% for %}
循环中,依赖关系将记录在三个
最近的文章。)
因此,如果将上述示例替换为:
^{pr2}$将以一种更有效和理智的方式工作。页面将 只有在顺序、组成或内容发生变化时才重建 在最近的三篇文章中。在
安装
从命令行向项目添加lektor limit依赖项:
lektor plugins add lektor-limit-dependencies
有关详细信息,请参见the Lektor plugin documentation。在
作者
杰夫·戴里基dairiki@dairiki.org
变更日志
版本0.1a1
发布日期:2020年5月19日
初始版本。在
- 项目
标签: