添加标签的编辑器插件。

lektor-tags的Python项目详细描述


Lektor标记插件

PyPI versionCode style: black

简介

这个插件为您的站点实现标记。对于每个标记,它构建一个页面,显示具有该标记的项目列表。这可以用于标准的基于标记的博客导航。有了这个插件,你可以给任何博客文章提供任意数量的标签,每个标签都会创建一个页面。

例如,如果您的站点在content/blog目录中有标记为coffeetea的博客文章:

name: First Post
---
tags:

coffee
tea

这个lektor-tags插件在这些url上构建页面:

  • /blog/tag/coffee/
  • /blog/tag/tea/

每个页面都可以列出带有该标记的所有文章。

安装

从命令行将Lektor标记添加到项目中:

lektor plugins add lektor-tags

the Lektor documentation for more instructions on installing plugins

概述

假设您有这样的“博客文章”模型:

[model]name=Blog Post[fields.tags]type=strings

制作一个blog-post.html模板,其中包括:

{% if this.tags %}
  <ul>
    {% for t in this.tags -%}
      <li><ahref="{{ ('/blog@tag/' ~ t.lower())|url }}">
          All posts tagged {{ t }}
        </a></li>
    {% endfor %}
  </ul>
{% endif %}

模板中的这个表达式为每个博客文章的标记生成一个source path

'/blog@tag/' ~ t.lower()

然后,如果标记是“我的标记”,表达式将呈现如下源路径:

/blog/tag/my-tag

使用url过滤器,lektor源路径变为实际的url。因此模板生成url来标记如下页面:

<a href="{{ ('/blog@tag/' ~ t.lower())|url }}"></a>

这将使用前面的源路径表达式,但将其通过url管道来生成从博客文章到标记页的实际链接。

配置

configs/tags.ini

中设置这些选项

parent

必需的。标记页父页的源路径。例如:

parent=/blog

然后标记页的源路径如下:

/blog/tag/my-tag

可以将根指定为父级:

parent=/

items

为一个标记查询页面上的所有项。您可以使用变量sitetag。模板的this变量有一个parent属性。默认查询为:

items=this.parent.children.filter(F.tags.contains(tag))

您可以使用任何表达式进行排序和筛选:

items=this.parent.children.filter(F.tags.contains(tag) and F.status == 'published').order_by('-pub_date')

如果父页具有a pagination query,则可能需要将其用于标记页:

items=this.parent.pagination.items.filter(F.tags.contains(tag))

the Lektor documentation for queries

tags_field

模型中包含标记的字段的名称。默认为tags。字段的类型应为strings。见the Lektor documentation for the ^{} type

例如,如果您的型号如下:

[fields.labels]type=strings

然后将其添加到tags.ini

tags_field=labels

template

列出具有特定标记的所有文章的页面模板。模板的this变量具有属性tagitems。示例模板:

<h1>Tag: {{ this.tag }}</h1><h1>Items:</h1><ul>
  {% for i in this.items %}
    <li><ahref="{{ i|url }}">{{ i._id }}</a></li>
  {% else %}
    <li><em>No items.</em></li>
  {% endfor %}
</ul>

将这样的文件保存到项目的templates/tags.html。如果您将文件命名为不同的名称,例如label.html,请将此行添加到tags.ini

template=label.html

如果不指定默认模板,插件将提供该模板。

url_path

每个标记页位置的表达式。您可以使用变量sitetag。变量this是一个具有属性parentitems的页面。默认表达式为:

url_path={{ this.parent.url_path }}tag/{{ tag }}

此表达式生成类似/blog/tag/coffee的url。

ignore_missing

默认为False。若要设置为true,请将此行添加到tags.ini

ignore_missing=true

这允许将缺少标记页的URL以“”替换。示例用例是如果您的blog-post.html模板包含如下语句:

{% for t in this.tags -%}
  <ahref="{{ ('/blog@tag/' ~ t.lower())|url }}">{{ t }}</a>
{% endfor %}

如果博客帖子^ {EM1}$草案“EEM”是不可发现的,并且它没有任何新的标签被没有发布的博客帖子使用,那么那些标签页面就不存在了。打开ignore_missing以允许生成此类草稿。在发布草稿并创建标记页之前,标记页URL路径将为空字符串“”。

tags

高级配置。一组标记的表达式。默认表达式为:

tags=parent.children.distinct("tags")

如果将tags_field设置为与“标记”不同的字段名,则默认表达式使用自定义字段名。例如,如果在tags.ini中有这一行:

tags_field=labels

那么默认值oftags是:

tags=parent.children.distinct("labels")

可以使用任何模板表达式。例如,如果项目具有“已发布”布尔字段,则可以选择已发布项目的标记:

tags=parent.children.filter(F.published).distinct("tags")

或者手动列出您的标签:

tags=["tag1", "tag2"]

the Lektor documentation for queries

标签总是重复数据消除,并按字母顺序排列。

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

推荐PyPI第三方库


热门话题
java为什么在ng构建之后使用404?   java Maven原型“quickstart”无法扩展其POM   java Arduino端口卡在满功率状态   java如何确保在参数化构造函数失败时不调用默认构造函数?   java检测Blackberry中的切换失败   java如何将安卓库(作为Angle)链接到Eclipse项目?   java压缩图片,但获取“未知压缩方法”   java无法对应该初始化的模拟实例进行测试   将现有eclipse项目导出到war文件时,java“模块名无效”   java如何防止AppletClassLoader在查找类/其他资源时击中服务器?   java正则表达式根据分隔组的分隔符的数量获取n个组   java在JLayeredPane后面与JPanel交互   Java中的xml Soap请求   webView中的java utf8代码页