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 |