【问题标题】:How to include metadata in a template file?如何在模板文件中包含元数据?
【发布时间】:2010-10-07 00:32:03
【问题描述】:

我有一个通过 erb 过滤模板文件的系统。使用约定优于配置,输出文件在镜像输入文件的文件层次结构中创建。许多文件具有相同的名称,我能够使用目录来区分它们。

该计划一直有效,直到我需要将附加信息与每个文件关联起来。所以我在每个目录中创建了一个带有元数据的 YAML 文件。现在我有两个约定 配置。呸。

然后我学习了Webby,以及它在每个模板文件顶部包含 YAML 元数据部分的方式。它们看起来像这样:

---
title: Baxter the Dog
filter: textile
---
All the best little blogs use Webby.

如果我可以实现这样的标头,我可以放弃我的层次结构和单独的 YAML 文件。 Webby 实现非常通用,实现了一个新的 MetaFile 类,将标题与“真实文本”分开,但它似乎比我需要的要复杂。

将元数据放在 erb 评论中似乎不错 - erb 会自动忽略它,但我不确定如何访问评论数据。

<%#
title: Baxter the Dog
%>

有没有办法访问 erb cmets?或者也许是不同的方法?我的很多模板都做了一堆 erb 的事情,但如果它使其余的更容易,我可以在单独的步骤中运行 erb。

【问题讨论】:

    标签: ruby metadata yaml erb webby


    【解决方案1】:

    如果你也将你的内容转储为 YAML 怎么样。大概元数据只是一个转储到 YAML 的哈希。您可以将内容作为字符串附加到同一文件中的第二个 YAML 文档中:-

    ---
    title: Baxter the Dog
    filter: textile
    --- |
    Content line 1
    Content line 2
    Content line 3
    

    倾销很简单:-

    File.open('file.txt', 'w') do |output|
      YAML.dump(metadata, output)
      YAML.dump(content, output)
    end
    

    加载很简单:-

    File.open('file.txt') do |input|
      stream = YAML.load_stream(input)
      metadata, content = stream.documents
    end
    

    请注意,管道字符出现在 YAML so that newlines in the content string are preserved 中。

    【讨论】:

    • 我喜欢这种方法;比 erb 评论更适合人类观看。我的一些内容可能已经包含 yaml,但如果我转义任何文档分隔符,我认为我是安全的? \---
    猜你喜欢
    • 2013-04-18
    • 2014-05-16
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多