【问题标题】:Liquid - Conditionally Include File From _includes FolderLiquid - 有条件地包含来自 _includes 文件夹的文件
【发布时间】:2021-09-22 18:46:33
【问题描述】:

我在 _layout 文件夹中有一个 default.html 文件。该文件包含整个站点通用的元素(例如,<head> 元素),并且应该在其他布局文件中调用,这将进一步扩展它。

根据调用 default.html 的文件,我想在 <head> 元素中包含适当的 sn-ps。

例如,考虑下面的(简化的)示例文件:

_includes/post_metadata.html:

<link rel="stylesheet" href="post.css">

_layouts/default.html

<html>
  <head>
    {% if <is_post_layout> %}
      {% include post_metadata.html %}
    {% endif %}
  </head>
  <body>
    {{ content }}
  </body>
</html>

_layouts/post_layout.html

---
layout: default
---
<article>
  {{ content }}
</article>

_posts/2021-09-22-post.md:

---
layout: post_layout
---
[...]

Jekyll 生成的最终页面应该包含:

<html>
  <head>
    <link rel="stylesheet" href="post.css">
  </head>
  <body>
    <article>
      [...]
    </article>
  </body>
</html>

那么,我应该使用什么代码来替换 以使其工作?

【问题讨论】:

  • 你还在做这个吗?我不确定你的问题是什么。我最好的猜测是{% if page.layout == 'post_layout' %}

标签: jekyll liquid


【解决方案1】:

有两个(甚至更多)选项。

一个类似@Brad West的评论。

您可以创建许多布局,请参阅docs。因此,创建一个 post.html(例如基于 default.html)布局并将其放在 _layouts 文件夹中。然后,您可以使用前面事项块中的布局。对于从头开始的布局,可以将none 用于空布局。

使用default 布局

---
layout: default
---

使用post 布局

---
layout: post
---

_layouts/default.html

<html>
  <body>
    {{ content }}
  </body>
</html>

_layouts/post.html

---
layout: none
---
<html>
  <head>
    {% include post_metadata.html %}
  </head>
  <body>
    {{ content }}
  </body>
</html>

另一个是在前面的问题块中使用变量include_post_metadata。设置变量为true,省略时为false/nil,不执行if条件。

---
layout: default
include_post_metadata: true
---

_layouts/default.html

<html>
  <head>
    {% if page.include_post_metadata %}
      {% include post_metadata.html %}
    {% endif %}
  </head>
  <body>
    {{ content }}
  </body>
</html>

页面 (page.include_post_metadata) 对页面和帖子有效

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多