我正在尝试重建Jekyll的博客,我已经找到了一个简单的任务。
如果我有以下模板集:
default.html中:
{{ head }}
{{ content }}
frontpage.html:
---
layout: default
---
{% capture head %}
Frontpage
{% end %}
{{ content }}
的index.html:
---
layout: frontpage
---
Other stuff
我原以为{% capture head %}
会将变量传递给布局。但似乎只有Front Matter中的变量实际上被传递为page.variable_name
。
有没有办法将capture
- d var传递给Jekyll的布局?
猜猜我可以为frontpage
和normal_page
设置两种不同的布局,以替换布局中的整个{{head}}{{content}}
块。但这就像html的两倍,所以如果可能的话,我宁愿用capture
解决它。
答案 0 :(得分:8)
您无法通过捕获执行此操作,但可以使用包含。页面层次结构的每个级别都可以覆盖head
键,以指向不同的包含文件
{% include {{ page.head }} %}
{{ content }}
---
layout: default
head: header1.html
---
{{ content }}
(Frontpage header content)
答案 1 :(得分:3)
如果您的用例与我的一样,并且您希望在模板中包含add'l内容,则可以使用YAML的块标量功能include multiline content from your front matter进入模板。 |
在>
删除(“折叠”)换行符时保持换行符。 (请注意,块指示符后面必须有一个空行。)
<强>的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? -->
<强> default.html中强>
<!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>