在 Pelican 中,如何创建一个专门用于托管所有博客文章的页面?

问题描述 投票:0回答:6

在pelican中,默认情况下,博客文章列在index.html文件中。

我想要的是使用静态页面作为我的主页,并将所有博客文章放在专门的“博客”页面上。

我怎样才能完成这件事?

blogs pelican static-site
6个回答
18
投票

虽然有多种可能的方法可以实现您的预期目标,但我将从对您的设置文件进行以下更改开始:

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.

注意事项:

  1. 动态导航菜单生成已被有效关闭,因为它不适用于此配置。当前活动菜单项的突出显示(通常是开箱即用的功能)不会出现在此配置中,如果需要,必须在主题中单独实现。

  2. 如果您的主题的

    base.html
    模板有一个指向您网站主页的链接,该链接依赖于
    SITEURL
    (例如,像 notmyidea 主题 那样),您将需要更改该链接以指向
    <a href="/">


7
投票

在pelicanconf中设置以下内容

DIRECT_TEMPLATES = ['blog']
PAGINATED_DIRECT_TEMPLATES = ['blog']

第一行将为文章设置 blog.html 第二行将允许 blog.html 文件分页

对于索引页面,在内容目录中创建一个pages文件夹并在其中创建.md文件并设置

save_as:index.html
这会将md文件保存为index.html


4
投票

鹈鹕常见问题解答中对此进行了介绍 - “如何覆盖特定页面或文章生成的 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 = ()

您现在应该有一个主页和一个带有博客菜单的内容栏。

如果您想向内容栏添加更多菜单(例如 AboutCV 菜单),请在

pages
文件夹中创建相应的文件,并将它们添加到
MENUITEMS

MENUITEMS = (
    ('About', '/pages/about.html'),
    ('CV', '/pages/cv.html'),
)

2
投票

我有一个类似于 Justin Mayer 给出的答案,除了我的答案是更改博客文章网址而不是页面网址。

在尝试使用上面的答案时,我遇到了以下错误,因此它可能对其他遇到相同问题的人有用

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
  1. 将所有文章网址都放在“blog/”网址下

    ARTICLE_URL = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"
    ARTICLE_SAVE_AS = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"
    
  2. 将博客索引放在“blog/”url 下

    INDEX_SAVE_AS = "blog/index.html"
    
  3. 为博客索引添加显式菜单项

    MENUITEMS = [
     ('home', '/'),
     ('blog', '/blog'),
    ]
    
  4. 由于您的页面现在是索引页面,在菜单中自动显示该页面的链接将导致链接损坏,因此您必须设置以下选项并指定以下标志

    DISPLAY_PAGES_ON_MENU = False
    
  5. 对于新的索引页,添加指令 save_as,就像 Justin Mayer 指出的那样。这是它最初的样子

    About
    =====
    :slug: about
    :category: About
    :save_as: index.html
    

    这应该为您提供一个主页和文章索引页。

  6. 当您想要添加更多静态页面时,如果您希望页面链接出现在菜单中,则还需要将它们添加到 URL 中仍包含“/pages”前缀的菜单项中。即对于志愿服务。首先包含以下内容,

    Volunteering
    ============
    :slug: about
    :category: About
    

您的 MENUITEMS 变量将如下所示

MENUITEMS = [
    ('home', '/'),
    ('blog', '/blog'),
    ('volunteering', '/pages/volunteering'),
]

我在 pelican 4.2.0 上测试了这个答案。


0
投票

您可以使用以下设置将索引文件放置在/blog/index.html。

INDEX_SAVE_AS = 'blog/index.html'
INDEX_URL = 'blog/'

然后您创建了一个 home.md 页面并使用“save_as:index.html”指令作为实际主页。


0
投票

首先创建文件夹

helloblog/index.html 我的第一博客/index.html

并将其上传到任何静态托管解决方案,例如在此处输入链接描述

© www.soinside.com 2019 - 2024. All rights reserved.