添加标签到 jekyll post 中断页面

Adding tags to jekyll post breaks page

假设我有以下前言:

title: example
date: 2019-09-16 00:00:00+2000
layout: post
categories: blog

以及以下 HTML 代码:

{% for post in site.posts %}
    {% for tag in post.tags %}
        <input type="checkbox">{{tag}}<br>
    {% endfor %}
{% endfor %}

正如预期的那样,页面看起来应该是这样,代码看起来也像您期望的那样:

How it should look:

但是,如果我在前面添加以下内容:

tags: ["code", "test", "example", "python"]

一切都坏了:

WRONG

发生了什么事?

jekyll -v >> jekyll 4.0.0

宝石:

编辑:如果我添加这个,它似乎抓住了整个 post 而不仅仅是类别:

{% for category in site.categories %}
    <input type="checkbox" name="{{category}}" value="{{category | capitalize }}">
{% endfor %}

这显然是错误的

该错误是由于您站点的 meta:

中的以下代码引起的
<meta name="keywords" content="{{site.tags}}">

site.tags 是所有标记为给定字符串的帖子的 散列 。 这里的一个hash表示一个键值对的容器。例如:

{"foo" => "bar", "alpha" => "beta"}


解决方案

使用其他一些变量来表示关键字。例如,keywords。 在您的配置文件中,将键 tags 替换为 keywords.

keywords: [
  "HTML",
  "Python",
  "CSS",
  "Coding",
  "Blog"
]

然后更新您的 head.html 包括:

<meta name="keywords" content="{{ site.keywords }}">

关于复选框的呈现,您需要知道 kramdown 将所有具有 4 个前导空格的行视为一个代码块。 因此以下

{% for post in site.posts %}
    {% for tag in post.tags %}
        <input type="checkbox">{{tag}}<br>
    {% endfor %}
{% endfor %}

只会产生

    <input type="checkbox">code<br>

    <input type="checkbox">test<br>

    <input type="checkbox">example<br>

    <input type="checkbox">python<br>

(它们不是呈现为 HTML 输入,而是呈现为原始代码。)


要查看您打算在 Liquid 中使用的任何对象的内部表示,您可以将其传递给 inspect 过滤器。例如,要查看 site.tags(甚至 site.categories)实际上是什么,您可以通过以下方式检查它们:

<pre>{{ site.tags | inspect }}</pre>