Lektor插件,用于添加标签。
项目描述
Lektor标签插件
介绍
此插件实现了对您站点的标签功能。对于您的每个标签,它都会构建一个显示带有该标签的条目列表的页面。这可以用于基于标签的标准博客导航。使用此插件,您可以给任何博客文章分配任意数量的标签,并为每个标签创建一个页面。
例如,如果您的网站在content/blog目录中有标记为coffee和tea的博客文章
name: First Post
---
tags:
coffee
tea
lektor-tags插件会构建以下URL的页面
- /blog/tag/coffee/
- /blog/tag/tea/
每个页面可以列出带有该标签的所有帖子。
安装
从命令行将lektor-tags添加到您的项目
lektor plugins add lektor-tags
有关安装插件的更多说明,请参阅Lektor文档。
概述
假设您有一个“博客文章”模型如下
[model]
name = Blog Post
[fields.tags]
type = strings
创建一个blog-post.html模板,其中包含
{% if this.tags %}
  <ul>
    {% for t in this.tags -%}
      <li>
        <a href="{{ ('/blog@tag/' ~ t)|url }}">
          All posts tagged {{ t }}
        </a>
      </li>
    {% endfor %}
  </ul>
{% endif %}
此表达式在模板中为每个博客文章的标签生成一个源路径
'/blog@tag/' ~ t
然后如果标签是“my-tag”,表达式将渲染一个源路径,如下所示
/blog/tag/my-tag
Lektor源路径通过url过滤器变成实际的URL。因此,模板为标签页面生成URL,如下所示
<a href="{{ ('/blog@tag/' ~ t)|url }}"></a>
这使用了之前的使用表达式,但通过url过滤以生成从博客文章到标签页的实际链接。
配置
在configs/tags.ini中设置以下选项
父级
必需。标签页面父页面的源路径。例如
parent = /blog
然后标签页面的源路径如下
/blog/tag/my-tag
您可以指定根作为父级
parent = /
条目
一个查询,用于页面上一个标签的所有条目。您可以使用site和tag变量。模板的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')
如果父页面有一个分页查询,您可能希望将其用于标签页面
items = this.parent.pagination.items.filter(F.tags.contains(tag))
有关查询的更多信息,请参阅Lektor文档。
tags_field
包含标签的字段的名称。默认为tags。该字段应为strings类型。有关strings类型的更多信息,请参阅Lektor文档。
例如,如果您的模型如下
[fields.labels]
type = strings
然后将其添加到tags.ini
tags_field = labels
模板
列出具有特定标签的所有帖子的页面的模板。模板的this变量具有tag和items属性。一个示例模板
<h1>Tag: {{ this.tag }}</h1>
<h1>Items:</h1>
<ul>
  {% for i in this.items %}
    <li><a href="{{ 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
每个标签页位置的表达式。您可以使用site和tag变量。this变量是一个具有parent和items属性的分页页面。默认表达式是
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 -%}
  <a href="{{ ('/blog@tag/' ~ t)|url }}">{{ t }}</a>
{% endfor %}
如果博客文章草稿不可发现,并且它使用了任何未发布的博客文章中未使用的标签,那么这些标签页面尚不存在。开启ignore_missing以允许构建此类草稿。标签页面URL路径将是空字符串"",直到草稿发布并创建标签页面。
tags
高级配置。一组标签的表达式。请注意,此表达式在模板中也很有用,可以获取所有标签的列表。默认表达式为:
tags = parent.children.distinct("tags")
如果您将 tags_field 设置为与 "tags" 不同的字段名,则默认表达式使用您的自定义字段名。例如,如果您在 tags.ini 中有此行
tags_field = labels
则 tags 的默认值是:
tags = parent.children.distinct("labels")
您可以使用任何模板表达式。例如,如果您的条目有一个 "已发布" 的布尔字段,您可以选择已发布条目的标签
tags = parent.children.filter(F.published).distinct("tags")
甚至可以手动列出您的标签
tags = ["tag1", "tag2"]
有关查询的更多信息,请参阅Lektor文档。
标签始终去重。标签按 contents.lr / admin 中列出的顺序排序,允许您手动控制它们的顺序。由于 {{ tags }} 简单地返回一个列表,因此您始终可以对列表应用任何 Jinja2 过滤器,例如排序、切片或 rejectattr。
标签云 & 标签权重
此插件不会自动构建标签云,但它提供了构建它的工具。
Jinja2 上下文有一个 tagweights() 函数,该函数返回一个字典,将标签映射到它们的权重,使用多个属性或函数。以下是这些属性和函数,以及如何在模板中使用它们的示例。
未使用的标签将被忽略。
TL;DR 我应该使用哪个权重函数?
- 要获取每个标签标记的页数,请使用 count。
- 要将标签映射到数字,请使用 log(lower, upper)。
- 要将标签映射到其他所有内容,请使用 loggroup(list)。
count — 带有此标签的页数
这是基本权重,用作以下标签的基础。
示例:按标签计数排序标签(最常用先)
<ul>
{% for tag, weight in (tagweights() | dictsort(by='value', reverse=true)) %}
    <li>{{ tag }} ({{ weight.count }} articles).</li>
{% endfor %}
</ul>
linear — 标签映射到 lower 和 upper 之间的数字。
使用率最低的标签映射到 lower,使用率最高的标签映射到 upper(lower 和 upper 可以相等,upper 可以小于 lower)。
映射使用线性函数完成。
结果是浮点数:您可能首先将它们转换为整数(请参阅 log 的示例)。
除非您知道自己在做什么,否则应使用 log。
log — 标签计数的对数映射到 lower 和 upper 之间的数字。
使用率最低的标签映射到 lower,使用率最高的标签映射到 upper(lower 和 upper 可以相等,upper 可以小于 lower)。
映射使用对数计数的线性函数完成。
结果是浮点数:您可能首先将它们转换为整数(请参阅示例)。
示例:最常用的标签是最不常用标签的两倍大小
{% for tag, weight in tagweights()|dictsort %}
<a
    href="{{ ('/blog@tag/' ~ tag)|url }}"
    style="font-size: {{ weight.log(100, 200)|round|int }}%;"
    >
        {{ tag }}
    </a>
{% endfor %}
lineargroup — 将每个标签映射到在参数中给出的列表中的项目。
使用率最低的标签映射到第一个项目,使用率最高的标签映射到最后一个项目。
映射使用线性函数完成。
除非您知道自己在做什么,否则应使用 loggroup。
loggroup — 标签计数的对数映射到在参数中给出的列表中的项目。
使用率最低的标签映射到第一个项目,使用率最高的标签映射到最后一个项目。
映射使用对数计数的线性函数完成。
示例:标签被赋予 CSS 类 tagcloud-tiny、tagcloud-small 等。
{% for tag, weight in tagweights()|dictsort %}
<a
    href="{{ ('/blog@tag/' ~ tag)|url }}"
    class="tagcloud-{{ weight.loggroup(["tiny", "small", "normal", "big", "large"]) }}"
    >
        {{ tag }}
    </a>
{% endfor %}
          项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分发
lektor_tags-0.5.2.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | d1f3a8125f052335904c60fadf866e138dd35d2f452ee05fd3f0aba1ea85fe89 | |
| MD5 | 2ea129c7502c9f2c9ec106e0be3286ff | |
| BLAKE2b-256 | 9d57a446e4041973215794f7e74af36ae62fbc250cbb5f0f03e76e78eb113af0 | 
lektor_tags-0.5.2-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b9da9873662a785b506bcf65d47441949062a65004f5308ce84e8f23cd07ac0c | |
| MD5 | 5bfbb2e6d0cb9bf9d59612a4ad3d3631 | |
| BLAKE2b-256 | 80b01d69f756220d5021d31a5361971917dae326dcbf22af52482d9f950688c7 |