在 pelican 中,默认情况下,博客文章列在 index.html 文件中。
我想要的是我使用一个静态页面作为我的主页,并将所有博客文章放在一个专用的“博客”页面上。
我怎样才能完成这项工作?
在 pelican 中,默认情况下,博客文章列在 index.html 文件中。
我想要的是我使用一个静态页面作为我的主页,并将所有博客文章放在一个专用的“博客”页面上。
我怎样才能完成这项工作?
虽然有几种可能的方法可以实现您的预期目标,但我将从对您的设置文件进行以下更改开始:
SITEURL = '/blog'
OUTPUT_PATH = 'output/blog'
PAGE_URL = '../{slug}.html'
PAGE_SAVE_AS = '../{slug}.html'
DISPLAY_PAGES_ON_MENU = False
DISPLAY_CATEGORIES_ON_MENU = False
MENUITEMS = [('Home', '/'), ('Blog', '/blog/')]
像往常一样放入您的博客文章content/
,然后使用以下标题创建您的主页并另存为content/pages/home.md
:
Title: Home
URL: ../
Save_as: ../index.html
This is the home page.
注意事项:
动态导航菜单生成已被有效关闭,因为它不适用于此配置。当前活动菜单项的突出显示(通常是开箱即用的功能)不会出现在此配置中,如果需要,必须在您的主题中单独实现。
如果您的主题base.html
模板有一个指向您的站点主页的链接,该链接依赖于SITEURL
(例如,就像notmyidea 主题那样),您需要将链接更改为指向<a href="/">
。
在 pelicanconf 中设置以下内容
DIRECT_TEMPLATES = ['blog']
PAGINATED_DIRECT_TEMPLATES = ['blog']
第一行将为文章设置 blog.html 第二行将允许对 blog.html 文件进行分页
对于索引页面,在内容目录中创建一个 pages 文件夹并在那里创建 .md 文件并设置save_as:index.html
这会将 md 文件保存为 index.html
Pelican 常见问题解答中对此进行了介绍 - “如何覆盖特定页面或文章的生成 URL?”
基本上,在您的contents
文件夹中,创建两个子文件夹:
/contents/blogs
,它将存储您的所有博客条目/content/pages
,它将存储您的其他静态页面(包括您的主页)在pages
子文件夹中,使用选项 创建一个文件(例如home.rst
):save_as: index.html
,这将使该文件成为您的主页。例如:
Home
####
:date: 2015-05-22 12:30
:url:
:save_as: index.html
This is my home page
在您的pelicanconf.py
文件中,指定以下选项:
DISPLAY_PAGES_ON_MENU = False
DISPLAY_CATEGORIES_ON_MENU = True
USE_FOLDER_AS_CATEGORY = True
PATH = 'content'
ARTICLE_PATHS = ['articles',]
PAGE_PATHS = ['pages',]
MENUITEMS = ()
您现在应该有一个主页和一个带有博客菜单的内容栏。
如果您想在内容栏中添加更多菜单(例如About或CV菜单),请在您的文件夹中创建相应的pages
文件,并将它们添加到MENUITEMS
:
MENUITEMS = (
('About', '/pages/about.html'),
('CV', '/pages/cv.html'),
)
我有一个类似于 Justin Mayer 给出的答案,除了在我的情况下,我更改了博客文章 url 而不是页面 url。
尝试使用上面的答案时,我遇到了以下错误,因此它可能对遇到相同问题的其他人有用
ERROR: Skipping volunteering.rst: file '../volunteering.html' would be written outside output path
ERROR: Skipping presentations.rst: file '../presentations.html' would be written outside output path
使所有文章的网址都在“博客/”网址下
ARTICLE_URL = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"
ARTICLE_SAVE_AS = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"
将博客索引放在“博客/”网址下
INDEX_SAVE_AS = "blog/index.html"
为博客索引添加显式菜单项
MENUITEMS = [
('home', '/'),
('blog', '/blog'),
]
由于您的页面现在是索引页面,因此在菜单中自动显示指向该页面的链接将导致链接断开,因此您必须设置以下选项并指定以下标志
DISPLAY_PAGES_ON_MENU = False
对于新的索引页面,添加指令 save_as,就像 Justin Mayer 指出的那样。这是它在 rst 中的外观
About
=====
:slug: about
:category: About
:save_as: index.html
这应该为您提供一个主页和一个文章索引页。
当您想添加更多静态页面时,如果您希望页面的链接出现在菜单中,您还需要将它们添加到 URL 中仍包含“/pages”前缀的菜单项中。即对于具有以下内容的志愿者.rst,
Volunteering
============
:slug: about
:category: About
您的 MENUITEMS 变量将如下所示
MENUITEMS = [
('home', '/'),
('blog', '/blog'),
('volunteering', '/pages/volunteering'),
]
我在 pelican 4.2.0 上测试了这个答案。
例如,您可以使用以下设置将索引文件放在 /blog/index.html 中。
INDEX_SAVE_AS = 'blog/index.html'
INDEX_URL = 'blog/'
然后,您创建了一个 home.md 页面并为实际主页使用“save_as: index.html”指令。