传递参数以包含在 Liquid 模板中

Posted

技术标签:

【中文标题】传递参数以包含在 Liquid 模板中【英文标题】:Passing parameters to inclusion in Liquid templates 【发布时间】:2014-03-25 10:34:51 【问题描述】:

在我的 Jekyll 驱动的网站上,我有一个包含类似函数的内容,但我不知道如何正确传递它的参数。

当我使用% include ... %时,像这样传递参数..

% include function.liquid foo=" baz.quux " %

..它只是传递文字字符串 baz.quux ,这当然不是我想要的!我想传递baz.quux 的值。我该怎么做?

谢谢!

【问题讨论】:

【参考方案1】:

有两种方法可以实现这一点。我已经针对 Jekyll 的 github-pages 版本测试了这两种方法。

使用捕获

假设您在包含的代码中引用 foo ,您需要在调用包含之前为 foo 分配一个值。

如:

% capture foo % baz.quux % endcapture %
% include function.liquid %

使用参数来包含

这允许您控制变量的范围,就像您想要的那样。在the templates documentation 中有一些关于如何设置的细节。

在您将使用的模板中,您的语法几乎是正确的:

% include function.liquid foo=baz.quux %

缺少的部分是在include文件的代码中需要对变量进行不同的引用,需要使用 include.foo

在 Shopify 液体中

截至 2021 年,您可以执行以下操作:

% include 'snippet-file' with bar, foo: baz, foo2: baz2 %

在 sn-p 文件中,使用 snippet-file 检索 bar 和使用 foo 检索 baz

对于 Liquid 语句,只需使用不带 的变量名,例如:

% if snippet-file==0 and foo2==':)' %

请注意,它不会像上一节中显示的那样像 include.foo2 那样工作。

另请注意,include 已弃用,对于新开发,您应该以类似的方式使用 render

【讨论】:

@Nick 我做了更多的研究并更新了我的答案。毕竟带参数的包含语法是可能的。 关于这个***.com/questions/22737362/…的任何想法::我有一个类似的问题:( 第二种语法很棒。我在任何地方的文档中都看不到它,但它有效! 除了纯文本或变量之外,有没有办法在include 中传递 html?我尝试使用捕获来传递 HTML 内容,但它被呈现为文本。 @RamPatra 可能最好写出您自己的问题,详细说明您正在尝试/尝试过的内容【参考方案2】:

除了 David Hutchison 的之外,还有第三种解决方案:

使用assign

% assign foo = baz.quux %
% include function.liquid %

现在您可以在包含的文件中引用 foo

【讨论】:

这显然是首选方式。 6 年前提出问题时可能不可用。【参考方案3】:

输入不带引号或括号的变量,如下所示:

% include footer.html param="value" variable-param=page.variable %

在你的情况下:

% include function.liquid foo=baz.quux %

它适用于我的网站。

发件人:https://github.com/jekyll/jekyll/issues/3577#issue-61988857

【讨论】:

【参考方案4】:

截至 2020 年 9 月 1 日,它确实是这样工作的:

jekyll v4.1.1

% assign title = 'this is my tittle' %
% include subscribeBtn.html title = title %

然后在模板中:

<h3> title </h3>

【讨论】:

以上是关于传递参数以包含在 Liquid 模板中的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-174.模板中include传递参数

将 DJango 模板变量作为输入参数传递

在Django中传递参数以形成动作?

切换基于模板类型 C++ 的引用参数传递

Angular ui-router - 如何访问从父模板传递的嵌套命名视图中的参数?

将依赖于对象的比较器作为模板参数传递,