Jekyll/Liquid - 如何将大块文本添加到YAML前置数据?

56

我正在尝试在Jekyll中实现服务目录,其中每个页面都包含一个7x2的表格。左列将包含标签,例如“概述”,“可用于”等,而右列将包含一行到几段文字。我希望能够使用Liquid变量来表征右列,例如{overview}、{availableTo}。

我注意到YAML似乎对换行非常挑剔,因此我不得不将这些段落及其标记输入为一行,可以延续多个屏幕宽度。这是一个问题,因为这很烦人,而且我希望这些front-matters可供技术但非Web开发用户编辑。有没有办法使front matter容忍换行?

或者,是否有一种方法可以使用{content}部分填充此表格,而无需每次重新编码表格?


可能是重复的问题:在 YAML 中,如何将字符串拆分为多行? - akostadinov
1个回答

91

多行字符串的Yaml语法如下所示

body: |
  This is a multi-line string.
  "special" metacharacters may
  appear here. The extent of this string is
  indicated by indentation. 

注意,第一行必须是一个空格,后跟|字符和一个换行符。 然后你必须将文本缩进一个级别,比其父级缩进更多。

因此,您可以通过以下方式创建一个项目:

item1:
  overview: |
    overview text
    more overview text
  available_to: 2012-01-01
  foo: |
    foo text
    more foo text

我认为你也想按顺序排列你的项目。你可以使用yaml列表来实现:

catalog:
  - id: item 1
    overview: |
      overview text
      more overview text
    available_to: 2012-01-01
    foo: |
      foo text
      more foo text
    ...
  - id: item2
    overview: <similar to above>

1
谢谢,这也帮助我解决了如何在YAML前置内容中添加引号字符(例如“)的问题! - Martin
6
就此事而言,YAML支持很多种不同的多行字符串格式。在许多情况下,>|更好,因为它不会在每一行的末尾插入换行符。 - Steve Bennett
@Philll_t,你需要在输出中添加markdownify过滤器{{ foo | mardownify }}。我发现为了实现换行,你还需要在frontmatter中添加额外的换行符。这里是如何操作的。 - Edward
可能还需要 newline_to_br 过滤器,例如 {{ x | markdownify | newline_to_br }} - gingerCodeNinja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接