Lektor插件,用于限制查询创建的依赖项

lektor-limit-dependencies的Python项目详细描述


勒克托极限依赖关系

PyPI versionPyPI Supported Python VersionsGitHub licenseGitHub Actions (Tests)

这是一个实验性的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日

初始版本。在

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

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中