Lektor CMS:无法让 lektor-tags 正常工作,在服务器上找不到请求的 URL
Lektor CMS : Can't get lektor-tags to work properly, The requested URL was not found on the server
我正在尝试使用 lektor CMS
构建一个 博客 ,为此我需要一个 标签系统 ,之后通过搜索,我在 lektor docs 上找到了一个名为 lektor-tags
的 lektor 插件
我遵循了文档中的每一步,挣扎了很久,甚至访问了 github repo 以查看是否还有其他未包含在文档中的内容。
我的问题是当我尝试访问 localhost:5000/{the_tag_name}
时说 localhost:5000/python
我总是得到 404 Not Found
说
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
这是我目前所做的:
在之前使用lektor-tags
:
我将博客 post 的路由更改为 /posts
而不是 /blog
。
在 [children]
中向 models/blog.ini
添加了 slug 格式
[children]
model = blog-post
order_by = pub_date, title
slug_format = {{ (this.pub_date|dateformat('YYYY/M/') if this.pub_date) ~ this._id }}
创建了 3 posts,一切正常。
此时我想使用标签系统所以我选择使用lektor-tags
,我所做的是:
安装
lektor plugins add lektor-tags
使用此配置创建configs/tags.ini
:
parent = /
url_path = {{ this.parent.url_path }}{{ tag }}
tags_field = tags
ignore_missing = true
template = tags.html
已创建 templates/tags.html
,内容如下:
{% extends "layout.html" %}
{% block title %}{{ this.title }}{% endblock %}
{% block body %}
<div class="container mt-3">
<b>Tag: {{ this.tag }}</b>
<b>Items:</b>
<ul>
{% for i in this.items %}
<li><a href="{{ i|url }}">{{ i._id }}</a></li>
{% else %}
<li><em>No items.</em></li>
{% endfor %}
</ul>
</div>
{% endblock %}
编辑 models/blog-post.ini
并添加:
[fields.tags]
type = strings
在 templates/blog-post.html
中,我添加了以下内容以向页面显示 links,其中包含具有特定标签的所有 posts 的列表:
{% if this.tags %}
<ul>
{% for t in this.tags -%}
<li>
<a href="{{ ('/' ~ t.lower())|url }}">
All posts tagged {{ t }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
最后 我更新了 post 以包含来自管理员的一些标签,并确保它在 content.lr
中 post。所以我停止了 lektor 开发服务器并再次 运行 它 lektor servor
没有出现任何错误。
标签的 link 存在于 post 中,但是当我点击并关注 link 例如 python 标签 localhost:5000/python
我得到 404 Not Found
。我是lektor的新手。我想知道我做错了什么,我怎样才能让它正常工作?
注意: 我使用的其他插件是 lektor-minify
,lektor-disqus-comments
这些插件的文档很简单,我没有感到困惑,但是当谈到这个特定的插件,我感到困惑,挣扎:文档不是那么好解释,我感到完全迷失了!
更新
我创建了一个 github repo 包含代码和我到目前为止所做的事情,因此您可以轻松地复制它。
更新 2
我设法让它正常工作,请参阅下面的答案,但是现在我想知道如何将根设置为父级,换句话说如何编辑此表达式:
<a href="{{ ('/posts@tag/' ~ t.lower())|url }}">
为博客 post 的每个标签生成源路径,但使用 root 作为父标签。
如您所见,我尝试了这个:
<a href="{{ ('/' ~ t.lower())|url }}">
但这不能正常工作。
值得一提的是,lektor 使用 jinja2
模板语言。
所以基本上是我做错了,因为我想像这样在 tags.ini
中使用根作为父级:
parent = /
我最终将 blog-post.html
中的表达式 '/blog@tag/' ~ t.lower()
更改为:
<a href="{{ ('/' ~ t.lower())|url }}">
使其无法为博客 post 的每个标签生成源路径
我改变和工作的是 :
我选择 posts
作为父级,将 configs/tags.ini
更新为:
parent = /posts
url_path = {{ this.parent.url_path }}{{ tag }}
tags_field = tags
ignore_missing = true
template = tags.html
已更新templates/blog-post.html
:
{% if this.tags %}
<ul>
{% for t in this.tags -%}
<li>
# '/posts@tag/' ~ t.lower() because i changed the route of blog to posts
<a href="{{ ('/posts@tag/' ~ t.lower())|url }}">
All posts tagged {{ t }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
运行 lektor clean --yes
然后 lekor server
一切正常,包括标签系统。
我正在尝试使用 lektor CMS
构建一个 博客 ,为此我需要一个 标签系统 ,之后通过搜索,我在 lektor docs 上找到了一个名为 lektor-tags
我遵循了文档中的每一步,挣扎了很久,甚至访问了 github repo 以查看是否还有其他未包含在文档中的内容。
我的问题是当我尝试访问 localhost:5000/{the_tag_name}
时说 localhost:5000/python
我总是得到 404 Not Found
说
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
这是我目前所做的:
在之前使用lektor-tags
:
我将博客 post 的路由更改为
/posts
而不是/blog
。在
中向[children]
models/blog.ini
添加了 slug 格式[children] model = blog-post order_by = pub_date, title slug_format = {{ (this.pub_date|dateformat('YYYY/M/') if this.pub_date) ~ this._id }}
创建了 3 posts,一切正常。
此时我想使用标签系统所以我选择使用lektor-tags
,我所做的是:
安装
lektor plugins add lektor-tags
使用此配置创建
configs/tags.ini
:parent = / url_path = {{ this.parent.url_path }}{{ tag }} tags_field = tags ignore_missing = true template = tags.html
已创建
templates/tags.html
,内容如下:{% extends "layout.html" %} {% block title %}{{ this.title }}{% endblock %} {% block body %} <div class="container mt-3"> <b>Tag: {{ this.tag }}</b> <b>Items:</b> <ul> {% for i in this.items %} <li><a href="{{ i|url }}">{{ i._id }}</a></li> {% else %} <li><em>No items.</em></li> {% endfor %} </ul> </div> {% endblock %}
编辑
models/blog-post.ini
并添加:[fields.tags] type = strings
在
templates/blog-post.html
中,我添加了以下内容以向页面显示 links,其中包含具有特定标签的所有 posts 的列表:{% if this.tags %} <ul> {% for t in this.tags -%} <li> <a href="{{ ('/' ~ t.lower())|url }}"> All posts tagged {{ t }} </a> </li> {% endfor %} </ul> {% endif %}
最后 我更新了 post 以包含来自管理员的一些标签,并确保它在
content.lr
中 post。所以我停止了 lektor 开发服务器并再次 运行 它lektor servor
没有出现任何错误。
标签的 link 存在于 post 中,但是当我点击并关注 link 例如 python 标签 localhost:5000/python
我得到 404 Not Found
。我是lektor的新手。我想知道我做错了什么,我怎样才能让它正常工作?
注意: 我使用的其他插件是 lektor-minify
,lektor-disqus-comments
这些插件的文档很简单,我没有感到困惑,但是当谈到这个特定的插件,我感到困惑,挣扎:文档不是那么好解释,我感到完全迷失了!
更新
我创建了一个 github repo 包含代码和我到目前为止所做的事情,因此您可以轻松地复制它。
更新 2
我设法让它正常工作,请参阅下面的答案,但是现在我想知道如何将根设置为父级,换句话说如何编辑此表达式:
<a href="{{ ('/posts@tag/' ~ t.lower())|url }}">
为博客 post 的每个标签生成源路径,但使用 root 作为父标签。 如您所见,我尝试了这个:
<a href="{{ ('/' ~ t.lower())|url }}">
但这不能正常工作。
值得一提的是,lektor 使用 jinja2
模板语言。
所以基本上是我做错了,因为我想像这样在 tags.ini
中使用根作为父级:
parent = /
我最终将 blog-post.html
中的表达式 '/blog@tag/' ~ t.lower()
更改为:
<a href="{{ ('/' ~ t.lower())|url }}">
使其无法为博客 post 的每个标签生成源路径
我改变和工作的是 :
我选择
posts
作为父级,将configs/tags.ini
更新为:parent = /posts url_path = {{ this.parent.url_path }}{{ tag }} tags_field = tags ignore_missing = true template = tags.html
已更新
templates/blog-post.html
:{% if this.tags %} <ul> {% for t in this.tags -%} <li> # '/posts@tag/' ~ t.lower() because i changed the route of blog to posts <a href="{{ ('/posts@tag/' ~ t.lower())|url }}"> All posts tagged {{ t }} </a> </li> {% endfor %} </ul> {% endif %}
运行 lektor clean --yes
然后 lekor server
一切正常,包括标签系统。