在Jekyll布局中,有没有办法检测页面是普通页面还是帖子?我想显示帖子标题,但不显示页面标题。像这样:
{% if page.is_post? %}
<h2>{{ page.title }}</h2>
{% endif %}
{{ content }}
答案 0 :(得分:26)
自Jekyll 2.0起,您可以使用Front Matter Defaults:
defaults:
-
scope:
path: "" # empty string for all files
type: posts # limit to posts
values:
is_post: true # automatically set is_post=true for all posts
然后您可以使用{{ page.is_post }}
来检查网页是否发布。
不知道为什么Jekyll默认不设置page.type
。
答案 1 :(得分:10)
在前面宣布一个帖子布局是不够的?
如果您的帖子使用post
布局,则您确定该页面是帖子,而您无需添加额外的逻辑
---
layout: post
---
BTW一种快速而肮脏(非常脏)的方式来确定页面类型包括检查页面路径,一般帖子都在_posts
目录下,所以你可以查看它
{% if page.path contains '_posts' %}
This page is a post
{% else %}
This page is a normal page
{% endif %}
答案 2 :(得分:7)
以下是我解决问题的方法:
_layouts/post
→_layouts/main
将帖子的布局更改为post
:
---
layout: post
---
在_layouts/main
中添加if语句,如下所示:
{% if page.layout == 'post' %}
<h2>{{ page.title }}</h2>
{% endif %}
解决这个问题的一个更好的方法可能是使用包含两个单独的布局,比如@dafi说。
答案 3 :(得分:5)
确定其网页或帖子是否使用{% if page.id %}
This is a post
{% endif %}
的最简单,最直接的方法。
<!DOCTYPE html>
<html lang="en">
{% include head.html %}
<body>
{% include header.html %}
{{ content }}
<!-- If this is a post, show previous/next post links -->
{% if page.id %}
{% if page.previous.url %}
<a href="{{page.previous.url}}">{{page.previous.title}}</a>
{% endif %}
{% if page.next.url %}
<a class="button is-link ellipsis" title="{{page.previous.title}}" href="{{page.next.url}}">{{page.next.title}}</a>
{% endif %}
{% endif %}
{% include footer.html %}
</body>
</html>
我个人在我的布局页面中使用此方法来确定它是一个页面还是帖子,这样我只能在帖子上显示上一个/下一个帖子的链接。
<强> _layouts / default.html中强>
def permutations(lot):
if not lot:
yield []
else:
item, start, end = lot[0]
for prefix_length in range(start, end+1):
for perm in permutations(lot[1:]):
yield [item]*prefix_length + [None] * (end - prefix_length) + perm
答案 4 :(得分:1)
帖子附带date
变量,而页面则没有。
虽然不是防弹,但此解决方案无需额外配置:
{% if page.date %}
<h2>{{ page.title }}</h2>
{% endif %}
答案 5 :(得分:-1)
您可以设置所有类型的_config.yml
默认值类型:
defaults:
- scope:
path: ""
type: "pages"
values:
type: "pages"