ruby - 在 YAML 变量中包含 jekyll/liquid 模板数据?

标签 ruby yaml jekyll liquid

我正在使用 Markdown 文件的 YAML 标题将 excerpt 变量添加到我可以在其他地方使用的博客文章中。在其中一个摘录中,我通过 markdown 链接标记引用了一篇较早的博客文章,我使用液体模板数据变量 {{ site.url }} 代替网站的基本 URL。

所以我有类似的东西(稍微修剪了一下)

--- 
title: "Decluttering ordination plots in vegan part 2: orditorp()"
status: publish
layout: post
published: true
tags: 
- tag1
- tag2
excerpt: In the [earlier post in this series]({{ site.url }}/2013/01/12/
decluttering-ordination-plots-in-vegan-part-1-ordilabel/ "Decluttering ordination
plots in vegan part 1: ordilabel()") I looked at the `ordilabel()` function
----

然而,jekyll 和 Maruku md 解析器不喜欢这样,这让我怀疑你不能在 YAML header 中使用液体标记。

是否可以在由 jekyll 处理的页面的 YAML header 中使用液体标记?

  1. 如果是,我在所示示例中做错了什么?
  2. 如果不允许,还有谁可以达到我的预期?我目前正在我的笔记本电脑上开发我的网站,不想对基本 URL 进行硬编码,因为当我准备好部署时它必须更改。

我从 Maruku 得到的错误是:

| Maruku tells you:
+---------------------------------------------------------------------------
| Must quote title
| ---------------------------------------------------------------------------
|  the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-o
| --------------------------------------|-------------------------------------
|                                       +--- Byte 40

| Maruku tells you:
+---------------------------------------------------------------------------
| Unclosed link
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
|                                       +--- Byte 41

| Maruku tells you:
+---------------------------------------------------------------------------
| No closing ): I will not create the link for ["earlier post in this series"]
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
|                                       +--- Byte 41

最佳答案

今天我遇到了类似的问题。作为一个解决方案,我创建了以下简单的 Jekyll 过滤器插件,它允许扩展嵌套的液体模板(例如 YAML 前面的液体变量):

module Jekyll
  module LiquifyFilter
    def liquify(input)
      Liquid::Template.parse(input).render(@context)
    end
  end
end

Liquid::Template.register_filter(Jekyll::LiquifyFilter)

过滤器可以添加到 Jekyll 站点,方法是将它们放在站点根目录的“_plugins”子目录中。上面的代码可以简单地粘贴到 yoursite/_plugins/liquify_filter.rb 文件中。

之后是一个模板,比如...

---
layout: default
first_name: Harry
last_name: Potter
greetings: Greetings {{ page.first_name }} {{ page.last_name }}!
---
{{ page.greetings | liquify }}

... 应该呈现一些输出,例如“Greetings Harry Potter!”。扩展也适用于更深的嵌套结构——只要在内部液体输出 block 上也指定了液化过滤器。像 {{ site.url }} 这样的东西当然也可以。

更新 - 看起来现在可以作为 Ruby gem 使用:https://github.com/gemfarmer/jekyll-liquify .

关于ruby - 在 YAML 变量中包含 jekyll/liquid 模板数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487110/

相关文章:

ruby-on-rails - Sphinx 增量索引——仍然需要重建主索引吗?

ruby - 在初始化方法中自定义 ArgumentError 消息

javascript - 咕噜观察和连接

ruby - 如何阻止 Guard 创建占用大量空间的日志文件

Ruby 和谷歌地图 API

.net - 我可以顺序读取 YamlDotNet 映射吗?

amazon-web-services - CloudFormation 未知标签!<!Cidr>

yaml - 使用 CouchDB 的 Hyperledger Fabric 客户端凭证存储

ruby - jekyll - 不处理子文件夹中的文件

ruby - 如何在 Ruby 中将字符串拆分为两个具有给定字符的部分?