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:

  1. 我将博客 post 的路由更改为 /posts 而不是 /blog

  2. [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. 创建了 3 posts,一切正常。

此时我想使用标签系统所以我选择使用lektor-tags,我所做的是:

  1. 安装

    lektor plugins add lektor-tags
    
  2. 使用此配置创建configs/tags.ini

    parent = /
    url_path = {{ this.parent.url_path }}{{ tag }}
    tags_field = tags
    ignore_missing = true
    template = tags.html
    
  3. 已创建 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 %}
    
  4. 编辑 models/blog-post.ini 并添加:

       [fields.tags]
       type = strings
    
  5. 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 %}
    
  6. 最后 我更新了 post 以包含来自管理员的一些标签,并确保它在 content.lr 中 post。所以我停止了 lektor 开发服务器并再次 运行 它 lektor servor 没有出现任何错误。

标签的 link 存在于 post 中,但是当我点击并关注 link 例如 python 标签 localhost:5000/python 我得到 404 Not Found。我是lektor的新手。我想知道我做错了什么,我怎样才能让它正常工作?


注意: 我使用的其他插件是 lektor-minifylektor-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 的每个标签生成源路径

我改变和工作的是 :

  1. 我选择 posts 作为父级,将 configs/tags.ini 更新为:

    parent = /posts
    url_path = {{ this.parent.url_path }}{{ tag }}
    tags_field = tags
    ignore_missing = true
    template = tags.html
    
  2. 已更新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 一切正常,包括标签系统。