【问题标题】:How does Jekyll use post.html to generate pages?Jekyll 如何使用 post.html 生成页面?
【发布时间】:2015-06-09 00:25:50
【问题描述】:

我在让 Jekyll 使用特定主题时遇到了一些困难,我认为关于 {{ content }} 如何处理帖子,我缺少一些基本的东西。

因此,在一个通用的 Jekyll 站点中,index.html 在其前面的内容中指定了一个布局。生成站点时,布局包括index.html 和{{ content }}。有点颠倒,页面指定布局,然后布局调用页面,但很简单。

另一方面,帖子都是通过文件post.html 生成的,该文件位于_layouts 文件夹中,尽管它并不是真正的布局。就像index.html 一样,它本质上只是一个 for 循环。这就是我遇到麻烦的地方。

post.html 是必需文件吗?我可以重命名为story.html吗?

为什么post.html 需要在前端布局?实际的帖子,即包含该帖子文本的降价,也需要在其前端进行布局。是否存在post.html 的布局与markdown 文件中指定的布局不同的情况?

编辑:另一个问题。为什么在多个地方调用{{ content }}? index.html 和布局文件都有 {{ content }}。为什么布局不简单{% include %} index.html 让index.html 调用{{ content }}

【问题讨论】:

    标签: ruby markdown jekyll liquid


    【解决方案1】:

    我想你在很大程度上是自己想出来的,但我还是会用我自己的话解释一下。

    你说得对,{{ content }} 是布局文件中实际页面内容所在的占位符。

    您可能会感到困惑的是,您可以构建一组嵌套布局文件,其中一个“继承”另一个,每个布局都有自己的{{ content }}。
    是的,我在文档中没有找到任何关于此的内容,我自己或通过查看示例找到了更好的方法。

    下面是一个给你的例子。
    一、默认布局和页面:

    /_layouts/default.html:

    <!DOCTYPE html>
    <html>
    <head>
        <title>{{ page.title }}</title>
    </head>
    <body>
    <h1>{{ page.title }}</h1>
    
    {{ content }}
    
    </body>
    </html>
    

    /index.md:

    ---
    title: example page
    layout: default
    ---
    
    This is the page content.
    

    生成的 HTML 将如下所示:

    <!DOCTYPE html>
    <html>
    <head>
        <title>example page</title>
    </head>
    <body>
    <h1>example page</h1>
    
    <p>This is the page content.</p>
    
    </body>
    </html>
    

    现在让我们创建另一个“继承”第一个布局文件的布局文件。
    如果您正在使用 Jekyll 构建博客,您可能会想要使用类似的东西。
    上面显示的布局文件是所有页面、博客文章和常规页面的默认布局文件。
    当您希望所有博客帖子都包含发布日期和用户、标签等附加信息时。

    为此,您可以创建使用第一个布局文件的第二个布局文件:

    /_layouts/post.html:

    ---
    layout: default
    ---
    
    <div class="blogpost">
        <i>post date: {{ page.date }}</i>
    
        {{ content }}
    </div>
    

    还有一篇使用这种布局的博文:

    /_posts\2015-04-08-example-post.md:

    ---
    title: example post
    layout: post
    ---
    
    This is the post content.
    

    以及生成的 HTML:

    <!DOCTYPE html>
    <html>
    <head>
        <title>example post</title>
    </head>
    <body>
    <h1>example post</h1>
    
    <div class="blogpost">
        <i>post date: 2015-04-08 00:00:00 +0200</i>
    
        <p>This is the post content.</p>
    </div>
    
    </body>
    </html>
    

    换句话说,发生了这样的事情:

    1. Jekyll 使用post 布局,将帖子内容放入{{ content }}
    2. Jekyll 使用default 布局并将步骤1 中生成的完整HTML 放入{{ content }}

    (不知道 Jekyll 是否真的按照这个顺序做事,但你明白了)

    如Jekyll site首页的“快速入门说明”所示新建Jekyll项目,可以看另一个例子。
    Jekyll (我的机器上的版本为 2.1.1) 创建的示例站点具有 三个 布局文件,其中两个(page 和 post)继承自默认一个。

    【讨论】:

    • 这是比我得到的更好的答案。 Jekyll 中的布局结构确实 有意义,但我花了一段时间才到达那里。
    【解决方案2】:

    我自己有一个答案,有点。每个 markdown 文件都在前面分配了一个布局。但是这个“布局”根本就不是真正的布局,还是部分布局?

    术语我没有理解,所以我只列出步骤。

    1) 降价文件有layout: post

    2) Markdown 文件中的任何内容都会被处理,然后发送到位于post.html 中的逻辑。这是我没有马上完成的部分:post.html 有它自己的布局。这就是前面的事情。基本上我们有布局的布局。

    3) 外部“布局”(香草 jekyll 安装中的default.html)将自身包裹在内部“布局”(post.html)周围,内部“布局”(post.html)将自身包裹在实际的 {{ content }} 周围。

    post.html 可以任意命名,只要正确设置了各种layout 行。

    我仍然不知道为什么 {{ content }} 会在布局堆栈的顶部结束,然后一直向下传递。在处理液体时,我什至不确定“通过”是正确的词。我喜欢 Jekyll,但它有点像蛇巢。

    【讨论】:

    • 这种布局嵌套的原因很简单。假设您希望呈现稍微不同的帖子(考虑单独的集合或仅几组帖子)。您不必保留多个布局,例如头部、页眉和页脚是相同的。您只需保留一个主要布局(并且可能会处理包含包含的页脚和页眉之类的大多数事情)并基于 default.html 构建单独的布局。
    • 同意。我很欣赏它的灵活性和干燥性,但它没有很好的记录(无论如何我找不到任何地方)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多