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

时间:2014-05-17 08:14:49

标签: blogs pelican static-site

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

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

我怎样才能完成这项工作?

5 个答案:

答案 0 :(得分:14)

虽然有几种可能的方法可以实现您期望的目标,但我会从设置文件的以下更改开始:

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 theme那样),您将需要将链接更改为指向<a href="/">

答案 1 :(得分:5)

在pelicanconf中设置以下内容

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

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

对于索引页面,在内容目录中创建一个pages文件夹并在那里创建.md文件并设置save_as:index.html这将把md文件保存为index.html

答案 2 :(得分:4)

Pelican常见问题解答中对此进行了介绍 - "How can I override the generated URL of a specific page or article?"

基本上,在contents文件夹中,创建两个子文件夹:

  • /contents/blogs,它将存储您的所有博客条目
  • /content/pages,它将存储您的其他静态页面(包括您的主页)

pages子文件夹中,使用选项home.rst创建一个文件(例如:save_as: index.html),这将使此文件成为您的主页。 E.g:

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 = ()

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

如果要向内容栏添加更多菜单(例如关于 CV 菜单),请在pages文件夹中创建相应的文件,并将它们添加到MENUITEMS

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

答案 3 :(得分:0)

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

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

然后你创建了一个home.md页面并使用&#34; save_as:index.html&#34;实际主页的指令。

答案 4 :(得分:0)

我有一个与贾斯汀·梅耶(Justin Mayer)相似的答案,除了在我的情况下,我更改博客文章的网址而不是页面的网址。

尝试使用以上答案时出现以下错误,因此它对于遇到相同问题的其他人可能很有用

package com.carterjwilde.reduceactivies;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    Button answer1Button, answer2Button;
    TextView questionTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        answer1Button = findViewById(R.id.answer1Button);
        answer2Button = findViewById(R.id.answer2Button);
        questionTextView = findViewById(R.id.questoinTextView);
    }

    public void onNext_Click(View v){
        questionTextView.setText("Another Random Question");
        answer1Button.setText("A");
        answer2Button.setText("B");
    }
}

1)将所有文章的网址都设置在“博客/”网址下

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

2)将博客索引放在“ blog /”网址下

ARTICLE_URL = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"
ARTICLE_SAVE_AS = "blog/{date:%Y}-{date:%m}-{date:%d}-{slug}.html"

3)为博客索引添加一个明确的菜单项

INDEX_SAVE_AS = "blog/index.html"

4)由于您的页面现在是索引页面,因此在菜单中自动显示指向该页面的链接将导致链接断开,因此您必须设置以下选项并指定以下标志

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

4)对于新的索引页,添加一个指令save_as,就像Justin Mayer指出的那样。这是第一次出现的情况

DISPLAY_PAGES_ON_MENU = False

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

5)当您想添加更多静态页面时,如果希望指向页面的链接出现在菜单中,则还需要将其添加到URL中仍包含“ / pages”前缀的菜单项中。即---

对于具有以下内容的志愿者,

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

您的MENUITEMS变量将如下所示

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

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