添加标签的编辑器插件。
lektor-tags的Python项目详细描述
Lektor标记插件
简介
这个插件为您的站点实现标记。对于每个标记,它构建一个页面,显示具有该标记的项目列表。这可以用于标准的基于标记的博客导航。有了这个插件,你可以给任何博客文章提供任意数量的标签,每个标签都会创建一个页面。
例如,如果您的站点在content/blog
目录中有标记为coffee
和tea
的博客文章:
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
为一个标记查询页面上的所有项。您可以使用变量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')
如果父页具有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 ^{
例如,如果您的型号如下:
[fields.labels]type=strings
然后将其添加到tags.ini
:
tags_field=labels
template
列出具有特定标记的所有文章的页面模板。模板的this
变量具有属性tag
和items
。示例模板:
<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
每个标记页位置的表达式。您可以使用变量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 -%} <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。
标签总是重复数据消除,并按字母顺序排列。