这完全没问题:
{% 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中包含一个定义为变量的文件?
答案 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。参见sample和result。
{% include {{ page.baaz }} %}
但是在您的情况下,它可能是变量中的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 %}