将文件名作为变量传递给Jekyll包括不起作用

时间:2018-04-06 03:16:27

标签: include jekyll liquid

这完全没问题:

{% capture foo %}{% include test.html %}{% endcapture %}

我想这样做:

frontmatter.md:

---
baaz: test.html
layout: layout.html
---    

的layout.html:

{% capture foo %}{% include {{ page.baaz }} %}{% endcapture %}

但是当我这样做时,我发出了这个错误:

" Liquid Exception:包含标记的语法无效。文件包含无效字符或序列:有效语法:{%include file.ext param =' value'参数2 ='值' %}"

我已经在其他几个问题中看到了这个问题,most recent explanation我发现了这个问题:

  

" ...无法添加动态文件名路径,因为包含的文件是在编译阶段计算和添加的,而不是在运行时阶段。编译阶段意味着动态路径尚未被识别。"

但是这个来源已有近两年的历史了。有没有人有解决方案呢?或者一种解决方法,允许我在frontmatter中包含一个定义为变量的文件?

3 个答案:

答案 0 :(得分:1)

您可以尝试{% include page.baaz %}

修改:经过一些调查后,您的语法似乎是正确的,只有在page.baaz不存在时才会触发错误。

这最终会出现一个包含标签的包含标签:

{% include %}

为了避免在未设置baaz的某些网页/帖子上出现此错误,您可以使用条件。

{% if page.baaz %}
  {% capture foo %}{% include {{ page.baaz }} %}{% endcapture %}
{% endif %}

答案 1 :(得分:0)

我有一个类似的问题......我找到了一个非常实用的解决方法。请允许我分享我的经验和解决方案。我希望它可以帮助您找到适合您问题的解决方案。

我想要建立什么
我想制作一个包含多个部分的页面。这些部分应该是可重用的,能够包含包含,并且它们应该易于在CloudCannon CMS中管理。

我想出的是什么
我最终使用了以下前提:

---
title: Lorem ipsum
description: Lorem ipsum
image: /img/default.jpg
section_blocks:
  - section: sectionwithinclude
  - section: anothersection
  - section: andyetanothersection
---

...以及以下的句子:

{% for item in page.section_blocks %}
{% for section in site.sections %}
    {% if item.section == section.slug %}
        <div class="section {{ item.section }}">
            {{ section.content }}
        </div>
    {% endif %}
{% endfor %}
{% endfor %}

_sections文件夹/集合中,我有一个名为sectionwithinclude.md的文件,如下所示:

---
---

{% include mycustominclude.html %}

为什么这很好
编辑页面时,CloudCannon会将section_blocks显示为带有重新排序按钮的数组。此外,CloudCannon将自动识别section作为集合并在下拉列表中显示选项。因此,添加一个部分是向数组添加一个空项目,从下拉列表中选择一个部分并使用数组按钮重新排序。同时,CloudCannon的内联编辑选项仍然有效。因此,文本管理可以是WYSIWYG,而块管理可以在前端数组中完成。

为您(和您的)编辑提供超级简单和强大的功能。

PS。您可能会发现存在一些“范围”问题,因为page不再与实际页面相关,而是与该部分相关。要解决此问题,您可以/应该更改模板中的循环。您可以让循环管理包含而不是部分。

答案 2 :(得分:0)

我最近才来此案。我假设语法为works as expected。参见sampleresult

   {% include {{ page.baaz }} %}

enter image description here

但是在您的情况下,它可能是变量中的page name could not be put,如错误所述:

Error:  Invalid syntax for include tag:

  File contains invalid characters or sequences

Valid syntax:

  ***% include file.ext param='value' param2='value' %***

因此,要解决此问题,建议您清点所有文件名并choose

{% case page.baaz %}
{% when 'test.html' %}
    {% capture foo %}{% include test.html %}{% endcapture %}
{% when 'othertest.html' %}
    {% capture foo %}{% include othertest.html %}{% endcapture %}
{% else %}
    This is not a test
{% endcase %}