如何在Jekyll/Liquid中将{%captured%}变量从视图传递到布局?

如何在Jekyll/Liquid中将{%captured%}变量从视图传递到布局?,jekyll,liquid,liquid-layout,jekyll-extensions,Jekyll,Liquid,Liquid Layout,Jekyll Extensions,我正试图用Jekyll重建一个博客,我完成了一个简单的任务 如果我有以下一组模板: default.html: {{ head }} {{ content }} --- layout: default --- {% capture head %} Frontpage {% end %} {{ content }} --- layout: frontpage --- Other stuff frontpage.html: {{ head }} {{ content }} --

我正试图用Jekyll重建一个博客,我完成了一个简单的任务

如果我有以下一组模板:

default.html:

{{ head }}

{{ content }}
---
layout: default
---

{% capture head %}
  Frontpage
{% end %}

{{ content }}
---
layout: frontpage
---

Other stuff
frontpage.html:

{{ head }}

{{ content }}
---
layout: default
---

{% capture head %}
  Frontpage
{% end %}

{{ content }}
---
layout: frontpage
---

Other stuff
index.html:

{{ head }}

{{ content }}
---
layout: default
---

{% capture head %}
  Frontpage
{% end %}

{{ content }}
---
layout: frontpage
---

Other stuff
我希望
{%capture head%}
会向布局传递一个变量。但似乎只有前面的变量才真正作为
page.variable\u name
传递

有没有办法将
捕获
-d var传递给Jekyll中的布局


我想我可以为
frontpage
normal\u页面
制作两种不同的布局,以替换布局中的整个
{{{head}}{{content}
块。但是这就像是html的两倍,所以如果可能的话,我宁愿用
capture
来解决它。

你不能用capture来解决这个问题,但是你可以使用include。页面层次结构的每一级都可以覆盖
head
键,根据需要指向不同的include文件。此示例使用条件包装include,因此如果未指定
head
键,页面仍将生成

default.html frontpage.html _includes/header1.html
如果您的用例与我的类似,并且希望在模板中包含add'l内容,那么可以使用YAML的块标量特性将其添加到模板中。
保留换行符,而
删除(“折叠”)换行符。(请注意,块指示器后面必须有一个空行。)

index.html

---
layout: default
head: |
  <link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
  <style type="text/css">
    #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
  </style>
script: |
  <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script>
  <script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='PHONE';ftypes[3]='phone';fnames[4]='ORG';ftypes[4]='text';fnames[5]='MMERGE5';ftypes[5]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
---
<!-- Content, maybe a MailChimp signup form? -->
<!DOCTYPE html>
<html>
<head>
  <title>
    {{page.title}}
  </title>
  <link rel="stylesheet" type="text/css" href="/css/main.css">

  <!-- here you can have add'l arbitrary head content -->
  {{ page.head }}
</head>
<body>
  {{content}}

  <script>
    // Google Analytics, perhaps?
  </script>

  <!-- here you can have add'l arbitrary content at the end of the page, good for scripts -->
  {{page.script}}
</body>
</html>
---
布局:默认值
负责人:|
#mc_embed_注册{背景:fff;清除:左;字体:14px Helvetica,Arial,无衬线;}
脚本:|
(函数($){window.fnames=new Array();window.ftypes=new Array();fnames[0]=“EMAIL”;[0]=“EMAIL”;[1]=“fnames”;[1]=“FNAME”;[1]=“text”;[2]=“LNAME”;ftypes[2]=“text”;[3]=“PHONE”;[3]=“PHONE”;[3]=“PHONE”;[4]=“ORG”;[4]=“text”;[4]=“text”;[5]=“fnames”;[5]=“ftypes”;[5];[5];[jjjj];var$mcj=jQuery.noConflict(true);
---
default.html

---
layout: default
head: |
  <link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
  <style type="text/css">
    #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
  </style>
script: |
  <script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script>
  <script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='PHONE';ftypes[3]='phone';fnames[4]='ORG';ftypes[4]='text';fnames[5]='MMERGE5';ftypes[5]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
---
<!-- Content, maybe a MailChimp signup form? -->
<!DOCTYPE html>
<html>
<head>
  <title>
    {{page.title}}
  </title>
  <link rel="stylesheet" type="text/css" href="/css/main.css">

  <!-- here you can have add'l arbitrary head content -->
  {{ page.head }}
</head>
<body>
  {{content}}

  <script>
    // Google Analytics, perhaps?
  </script>

  <!-- here you can have add'l arbitrary content at the end of the page, good for scripts -->
  {{page.script}}
</body>
</html>

{{page.title}}
{{page.head}
{{content}}
//也许是谷歌分析?
{{page.script}

我不确定您想在这里完成什么。为什么不能使用include?你为什么一开始就想抓住整个脑袋?更多的上下文可能会更好。因为我想根据页面的不同,从模板中替换主布局中的标题部分,为什么不简单地将更改的内容放在前面呢?我不想将html放在前面,因为现在我添加了另一个模板。我同意这会很有用。我想要一个有两列的页面,一个主列和一个带有附加页面内容的边栏。不可能在html标记中使用标记,因此我不能将两个标记块包装在列标记中。我想到的另一个选择是使用
capture
,就像Nick在上面尝试的那样,提供一个任何页面都可以使用的
边栏。非常不幸的是,它不受支持,因为它使得编写多元素标记页面非常尴尬。