- 软件需求目录
- 使用工具
- 命令
- 静态目录
- 写博文
- 发布博客
- 博客功能拓展
- 尾声
软件需求目录
- pelican
- python-markdown
*
使用工具
- python(我用的是2.7的最新版,会把下面的工具都带上)
- easy_install
- pip
命令
- 安装必要程序
pip install pelican markdown
NOTE
注意,有时候,还会使用工具 virtualenv 。
具体用途,请自行查阅相关资料,不过基本不用python进行大型开发也就基本用不上这个。
- 创建目录
在你要放置博客基本框架的位置,建立一个文件夹。
直接手工建立就好。
- 快速开始
在文件夹中,可以使用命令
pelican-quickstart
进行快速设置建立一些基本的文件。
会问一系列问题,比如博客网址啊,作者名字啊之类的,根据真实情况填写即可,这些问题只是用来生成配置文件的,后面可以通过修改配置文件来手动修改这些设置。
结果会生成一个目录,大体如下:
. ├── content # 这个就是放博客内容目录,这个目录及子目录下的所有md和rst文件将会被转成html文件 ├── output # 这个是从content目录生成的html目标文件的存放目录 ├── develop_server.sh #这个是用来在本地运行一个服务器来实时查看生成的html文档的脚本 ├── fabfile.py # 这个是使用Python的fabric来实现文件上传的工具,即Deploy工具 ├── Makefile # 这个是使用是用来生成网站内容并上传的工具。 ├── pelicanconf.py # 这个是本地开发时的配置文件 └── publishconf.py # 这个是发布时的配置文件
其中,由于我们是使用git来进行内容更新,所以基本使用的就是下面这些文件及文件夹
├── content # 这个就是放博客内容目录,这个目录及子目录下的所有md和rst文件将会被转成html文件 ├── output # 这个是从content目录生成的html目标文件的存放目录 ├── develop_server.sh #这个是用来在本地运行一个服务器来实时查看生成的html文档的脚本 ├── pelicanconf.py # 这个是本地开发时的配置文件
- 个性化配置
经过之前的设置,出来的pelicanconf.py文件内容已经有了雏形,但是对于进一步的个性化,是远远不够的,还需要我们继续添加修改内容。
至于能添加哪些内容,移步 文档
关于日后自行添加个性选项要注意
原本的内容都是这样:
AUTHOR = u'果子'
要注意,等号左边为全部大写的字母
如果感兴趣可以看我的使用nest主题的 pelicanconf.py1
关于publishconf.py 与 Makefile
我没有使用过,具体请自己查阅文档。
我的使用,就没用到。
- 配置主题,插件
当前查看效果的方式
可以使用本地预览。
即:先在 根目录
pelican content cd output python -m pelican.server
然后打开 http://localhost:8000 查看效果
Pelican支持大量的开源主题,GitHub上的 pelican-themes 项目有几十套主题,大部分都带了效果预览图。可以从里面挑一个你喜欢的主题样式来使用。还有一个更方便的挑选主题的方式,直接打开www.pelicanthemes.com 挑选吧。一个网页里就列出了几乎所有的主题。我的博客是使用 nest 主题,并在这套主题的基础上进行了一些定制。选定好喜欢的主题后,从GitHub上下载下来所有的主题:
git clone https://github.com/getpelican/pelican-themes.git
我直接将其解压成了 根目录
然后在 pelicanconf.py 配置文件里添加或修改 THEME项为 nest
THEME = "nest"
(我使用了几个主题,觉得还是nest的汉化还是很方便的,作者很贴心的将参数剥离出来)
Pelican 一开始是将插件内置的, 但是新版本 Pelican将插件隔离了出来, 所以要到github上 克隆一份新的插件,执行
git clone git://github.com/getpelican/pelican-plugins.git
内容放在 根目录
现在博客目录就新添了一个 pelican-plugins 目录,以配置sitemap插件为例, sitemap插件可以生成 sitemap.xml 供搜索引擎使用。
在pelicanconf.py中修改添加:
# 插件,render_math 提供数学公式的显示
# Plugin PLUGIN_PATHS = ['pelican-plugins'] PLUGINS = [ 'sitemap', 'render_math'] # Sitemap SITEMAP = { "format": "xml", "priorities": { "articles": 0.7, "indexes": 0.5, "pages": 0.3, }, "changefreqs": { "articles": "monthly", "indexes": "daily", "pages": "monthly", } }
最后执行
pelican content
就会在output中生成相关的html文件
静态目录
PATH = 'content'
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['articles']
STATIC_PATHS = ['images', 'extra/robots.txt', 'extra/favicon.ico', 'extra/logo.svg', 'charity']
EXTRA_PATH_METADATA = {
'extra/robots.txt': {'path': 'robots.txt'},
'extra/favicon.ico': {'path': 'favicon.ico'},
'extra/logo.svg': {'path': 'logo.svg'},
'charity/404.html': {'path': '404.html'}
}
注意这部分设置,在content下放置着写博客要用到的一些内容,因为毕竟是 content -> output 内容的转换。所以尤其要注意这里的设置。这里有博文,图片,一些有些主题会用到的文档,图标,头像甚至是404页面都有放置在对应的文件目录下。这些目录是可以自己设置的,但是尽量是归好类。
关于静态目录:
A list of directories (relative to PATH) in which to look for static files. Such files will be copied to the output directory without modification. Articles, pages, and other content source files will normally be skipped, so it is safe for a directory to appear both here and in PAGE_PATHS or ARTICLE_PATHS. Pelican`s default settings include the “images” directory here.
写博文
pelican写博文,需要在md文档最前面加上元数据,下面是个例子,具体用哪些数据,还得看主题的代码上怎么设定,在主题的readme.md文件中若有增加,一般有提示,一般的如下例:
Title: winsows效率之bat文件1
Date: 2017-02-18 17:07:19
Category: 效率
Tags: bat
Slug: bat1
Author: lart
Status: draft
Status: draft 会让文章不显示,默认为草稿。撰写完文章,需要发布时,需要把这行元数据去掉。否则文章不会出现在博客主页。只会在drafts下看得到:
你的网址/drafts
“你的网址”指提交的网站,或者本地预览时的 http://localhost:8000/ 使用上面的网址就可以看到。
元数据后要与文本内容空一行以表示元数据的结束。
发布博客
要发布在网上,一般的会使用代码托管网站的page服务。我所知道的有三个站点提供:
码云 Coding GitHub
相比之下,感觉码云稍快一些,但是Coding有提供https协议。而github不多说。大家自己选择。我用的是码云。
申请账号,创建项目,使用pages,码云文档做的不错,直接 过去看 就好。
这里甚至提到了如何使用404页面。实际上就是放置到output目录下。
一切准备就绪后,可以在使用过命令 pelican content 后, 进入output,使用git。
git init git add . git commit -m "pelican static blog test" git remote add origin https://git.net/p_lart/p_lart.git
# 我的仓库地址就是:git@git.net:p_lart/p_lart.git git push -u origin master
要是运行这个后出现:
To ...(地址) ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/LarT2P/pelican-nest-blog.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
可以尝试使用命令:
git push -u origin master -f
由于我是用的是windows,现在的博文推送方式有点麻烦,可以写bat文件简化流程。
由于安装git后,实际上是可以在cmd中使用的。于是有:
文件之本地预览:
@eche off
@title 本地预览pelican博客
echo 进入文件夹
rem 这是我的content所在目录
cd /d D:\git clone\BLOG\lart\lart
echo 执行pelican content
pelican content
echo 进入output
cd /d output
echo 启动本地服务器
python -m pelican.server
echo 结束...
echo 请前往 http://localhost:8000/ 查看
pause
文件之推送博文:
@echo off
@title bat交互执行git命令
echo 进入文件夹
cd /d D:\git clone\BLOG\lart\lart
echo 执行pelican content
pelican content
echo 执行git
cd /d output
git add .
git commit -m "update"
git push origin master
echo done...
pause
直接使用这两个批处理就可以完成相应的任务。
之后查看即可。
博客功能拓展
评论功能。
pelican支持
DISQUS_SITENAME = "" GOOGLE_ANALYTICS = ""
disqus 谷歌分析
国内可以换成(我所用的)友言或者多说,以及百度统计。
具体如何置换,直接在文件夹中搜索 上面的两个字符串
(我用的是sublime,文件夹中搜索,从搜索结果,进入对应文件中,修改你所用的主题的相应的代码块。这里只需要将对应标签下的内容进行置换就好)
至于用来置换的内容,见下:
以友言(这里有分享按钮以及评论系统还有推荐系统的代码都可以尝试)为例:
获取代码 ->
选择平台:通用代码 ->
那个代码复制好,粘贴到对应的 DISQUS_SITENAME 所在的主题里的模板文件中,nest主题是有个单独的文件,直接修改其中内容,if 语句中的内容不要改,相当于就是用原本的DISQUS的文件调用关系,使用我们的新内容。 ->
置换完成后,在pelicanconf文件中 DISQUS_SITENAME = "" 的 “” 里写点字符串,不要为空,这样就可以运行代码了。我是把该改的都改了,所以我的配置文件中有点不同。
同样的。百度统计 也是一样的。
注册时,必要的信息是要准确的。
进入 ->
管理 ->
代码获取 ->
按说明内容进行安装。
至于代码放置的方式,类似上面的,就不多说。这个相当于就是提供一个访问统计的一个后台,在博客网站页面上也看不出变化,但是在百度统计的我们的管理系统中,我们可以看到很多有用的数据。
尾声
至此,我的这几天的工作已经结束,虽然似乎没有太多的难度,但是对于我这样一个新手而言,却处处遇到困难。
这些内容也只是用到了pelican文档中不多的页面,所以可见,它的可塑空间还很大,大家可以积极改动尝试。
提示
pelican 使用markdown写博客,python-markdown的语法支持比常规的要丰富一点,所以可以看一下我的另一篇博文,那博文要是用在一般的markdown网站上,有些格式就显示不正常。
python-markdown
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# Site settings
AUTHOR = u'果子'
AUTHOR_EMAIL = u'@qq.com'
SITENAME = u'果园'
SITEURL = 'http://p_lart.io'
DEFAULT_DATE_FORMAT = ('%Y-%m-%d')
TIMEZONE = 'Asia/Shanghai'
DEFAULT_LANG = u'zh'
DEFAULT_METADATA = (
)
DELETE_OUTPUT_DIRECTORY = False
# Blogroll
LINKS = (
('果园', 'http://lart.coding.me'),
)
#######可以改动社交链接
# Social widget
SOCIAL = (
('码云(p_lart)', 'https://gi.net/p_lart'),
('Coding(lart)', 'https://coding.net/u/lart'),
)
# 几乎所有的博客主题都有一个地方展示你的社交账号,这些账号就写在这里,上面是我的
# A list of tuples (Title, URL) for additional menu items to appear at the beginning of the main menu.
MENUITEMS = (
)
# Content path
PATH = 'content'
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['articles']
STATIC_PATHS = ['images', 'extra/robots.txt', 'extra/favicon.ico', 'extra/logo.svg', 'charity']
EXTRA_PATH_METADATA = {
'extra/robots.txt': {'path': 'robots.txt'},
'extra/favicon.ico': {'path': 'favicon.ico'},
'extra/logo.svg': {'path': 'logo.svg'},
'charity/404.html': {'path': '404.html'}
}
ARTICLE_URL = ('articles/{slug}.html')
ARTICLE_SAVE_AS = ('articles/{slug}.html')
PAGE_LANG_SAVE_AS = False
# Feed
FEED_DOMAIN = SITEURL
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
TRANSLATION_FEED_ATOM = None
# 每页博文数目
DEFAULT_PAGINATION = 5
# markdown设置
MARKDOWN = {
'extension_configs': {
'markdown.extensions.extra': {},
'markdown.extensions.admonition': {},
'markdown.extensions.codehilite': {'css_class': 'highlight'},
'markdown.extensions.meta': {},
'markdown.extensions.nl2br': {},
'markdown.extensions.sane_lists': {},
'markdown.extensions.smarty':{},
'markdown.extensions.toc': {},
'markdown.extensions.wikilinks': {},
},
'output_format': 'html5',
}
# 评论系统,我是用的是友言
# Comments
UY = "Comments"
# 我用的是百度统计
# Analytics
BAIDU = "Baidu"
# 插件,render_math 提供数学公式的显示
# Plugin
PLUGIN_PATHS = ['pelican-plugins']
PLUGINS = [ 'sitemap', 'render_math']
# Sitemap
SITEMAP = {
"format": "xml",
"priorities": {
"articles": 0.7,
"indexes": 0.5,
"pages": 0.3,
},
"changefreqs": {
"articles": "monthly",
"indexes": "daily",
"pages": "monthly",
}
}
# Can be useful in development, but set to False when you're ready to publish
RELATIVE_URLS = False
# 下面的就是nest主题的配置了,我把一些页面上的英文都简单汉化了。有的主题没有提供类似这样的参数,想改的去主题文件夹中更改。
# NEST Template
THEME = 'pelican-themes/nest'
SITESUBTITLE = u'我的 果子'
# Minified CSS
NEST_CSS_MINIFY = True
# Add items to top menu before pages
MENUITEMS = [('果园', '/'),('类别','/categories.html')]
# Add header background image from content/images : 'background.jpg'
NEST_HEADER_IMAGES = 'background.jpg'
NEST_HEADER_LOGO = '/images/logo.png'
# Footer
NEST_SITEMAP_COLUMN_TITLE = u'目录'
NEST_SITEMAP_MENU = [('归档', '/archives.html'),('标签','/tags.html'), ('作者','/authors.html')]
NEST_SITEMAP_ATOM_LINK = u'Atom Feed'
NEST_SITEMAP_RSS_LINK = u'RSS Feed'
NEST_SOCIAL_COLUMN_TITLE = u'社交'
NEST_LINKS_COLUMN_TITLE = u'链接'
NEST_COPYRIGHT = u'© 果园 2017'
# Footer optional
NEST_FOOTER_HTML = ''
# index.html
NEST_INDEX_HEAD_TITLE = u'果园'
NEST_INDEX_HEADER_TITLE = u'林间果几颗'
NEST_INDEX_HEADER_SUBTITLE = u'一篇篇博客,就像一粒粒果子,从思想最深处,逐渐结出'
NEST_INDEX_CONTENT_TITLE = u'旧果'
# archives.html
NEST_ARCHIVES_HEAD_TITLE = u'归档'
NEST_ARCHIVES_HEAD_DESCRIPTION = u'上传归档'
NEST_ARCHIVES_HEADER_TITLE = u'归档'
NEST_ARCHIVES_HEADER_SUBTITLE = u'收集起来的一篇篇博客,一粒粒果子,都是时间的见证'
NEST_ARCHIVES_CONTENT_TITLE = u'归档'
# article.html
NEST_ARTICLE_HEADER_BY = u'作者 '
NEST_ARTICLE_HEADER_MODIFIED = u'修改于 '
NEST_ARTICLE_HEADER_IN = u'归类于 '
# author.html
NEST_AUTHOR_HEAD_TITLE = u'上传自 '
NEST_AUTHOR_HEAD_DESCRIPTION = u'上传自 '
NEST_AUTHOR_HEADER_SUBTITLE = u'上传归档'
NEST_AUTHOR_CONTENT_TITLE = u'上传'
# authors.html
NEST_AUTHORS_HEAD_TITLE = u'作者'
NEST_AUTHORS_HEAD_DESCRIPTION = u'作者'
NEST_AUTHORS_HEADER_TITLE = u'作者'
NEST_AUTHORS_HEADER_SUBTITLE = u'根据作者归档'
# categories.html
NEST_CATEGORIES_HEAD_TITLE = u'类别'
NEST_CATEGORIES_HEAD_DESCRIPTION = u'根据类别归档'
NEST_CATEGORIES_HEADER_TITLE = u'类别'
NEST_CATEGORIES_HEADER_SUBTITLE = u'根据类别归档'
# category.html
NEST_CATEGORY_HEAD_TITLE = u'类别归档'
NEST_CATEGORY_HEAD_DESCRIPTION = u'类别归档'
NEST_CATEGORY_HEADER_TITLE = u'类别'
NEST_CATEGORY_HEADER_SUBTITLE = u'类别归档'
# pagination.html
NEST_PAGINATION_PREVIOUS = u'上一页'
NEST_PAGINATION_NEXT = u'下一页'
# period_archives.html
NEST_PERIOD_ARCHIVES_HEAD_TITLE = u'归档于'
NEST_PERIOD_ARCHIVES_HEAD_DESCRIPTION = u'归档于'
NEST_PERIOD_ARCHIVES_HEADER_TITLE = u'归档'
NEST_PERIOD_ARCHIVES_HEADER_SUBTITLE = u'归档于'
NEST_PERIOD_ARCHIVES_CONTENT_TITLE = u'归档于'
# tag.html
NEST_TAG_HEAD_TITLE = u'标签归档'
NEST_TAG_HEAD_DESCRIPTION = u'标签归档'
NEST_TAG_HEADER_TITLE = u'标签'
NEST_TAG_HEADER_SUBTITLE = u'标签归档'
# tags.html
NEST_TAGS_HEAD_TITLE = u'标签'
NEST_TAGS_HEAD_DESCRIPTION = u'标签'
NEST_TAGS_HEADER_TITLE = u'标签'
NEST_TAGS_HEADER_SUBTITLE = u'根据标签归档'
NEST_TAGS_CONTENT_TITLE = u'标签'
NEST_TAGS_CONTENT_LIST = u' 被标注'
- 见上: ↩










