【问题标题】:Code snippets/blocks within YFM variablesYFM 变量中的代码片段/块
【发布时间】:2015-11-06 21:25:04
【问题描述】:

我正在尝试从 Litmus 获取代码 sn-p 以在我的 Assemble.io 项目(HTML 电子邮件)中使用。典型的代码块如下所示:

<style>@media print{ #_t { background-image: url('https://0me4e2bg.emltrk.com/0me4e2bg?p&d=%%Email%%');}} div.OutlookMessageHeader {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} table.moz-email-headers-table {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} blockquote #_t {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} #MailContainerBody #_t {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')}</style><div id="_t"></div>
<img src="https://0me4e2bg.emltrk.com/0me4e2bg?d=%%Email%%" width="1" height="1" border="0" />

理想情况下,我很乐意将整个内容放入 YFM 变量中,但我尝试过但没有成功。我相信解析器会卡在#、引号、花括号或上述任何组合上。我尝试将代码块包装在 ''、""、` 和 ``` 中,但都不起作用。现在我已经采用了该块的可变部分(在本例中为 0me4e2bg)并在我的 YFM 中使用了它,它工作得很好,但我确信在 YFM 中使用 CSS 和 HTML 块/sn-ps 已经发生了其他人,我很好奇是否有解决方案?只是我没有正确逃避它吗?谢谢!

编辑:尝试 Anthon 建议的答案后,我收到以下错误

can not read an implicit mapping pair; a colon is missed

看起来是由@media 中的@ 触发的?

【问题讨论】:

    标签: yaml assemble yaml-front-matter


    【解决方案1】:

    YAML 中的标量不需要引号,除非它具有特殊字符,在您的情况下它确实如此。带引号的标量可以使用需要重复现有单引号的单引号,或者可以使用反斜杠转义的双引号。

    如果你想要你的字符串,使用文字块引用是最好的方法,唯一有问题的是开始空格和行尾空白(即在换行符之前)。您应该能够将代码块分配给变量code,如下所示:

    ---
    title: YAML Front Matter
    description: A very simple way to add structured data to a page.
    code: |
      <style>@media print{ #_t { background-image: url('https://0me4e2bg.emltrk.com/0me4e2bg?p&d=%%Email%%');}} div.OutlookMessageHeader {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} table.moz-email-headers-table {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} blockquote #_t {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')} #MailContainerBody #_t {background-image:url('https://0me4e2bg.emltrk.com/0me4e2bg?f&d=%%Email%%')}</style><div id="_t"></div>
      <img src="https://0me4e2bg.emltrk.com/0me4e2bg?d=%%Email%%" width="1" height="1" border="0" />
    ---
    <h1> {{ title }} </h1>
    

    您必须确保code 下的缩进一致,这通常比解析字符串以转义字符更容易。

    你可以例如check online 第一部分是有效的 YAML。

    【讨论】:

    • 谢谢,但不幸的是,当我这样运行它时会返回错误(我会用错误编辑我的原始问题)
    • @pipboy3000 我用一个指向 YAML 1.1 解析器的链接更新了我的答案,该解析器(正确地)解析了这个。它也适用于我的 YAML 1.2 兼容解析器。看起来您在 js-yaml 或 assemble.io 使用它的方式中发现了一个错误,应该报告它。
    • 感谢您的关注,我在 github 上向 assemble 项目组提交了一个 bug。 github.com/assemble/assemble/issues/756
    • 这与 assemble 没有任何关系。 assemble 使用 gray-matter 来解析 front-matter。并且由于 gray-matter 只是将一个字符串传递给解析器 - 在这种情况下 js-yaml,gray-matter 也无法对错误做任何事情。这听起来像是一个 js-yaml 问题
    猜你喜欢
    • 2017-10-18
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多