pelican

Pelican Static Site Generator, Powered by Python:Pelican是python语言写的静态网站生成器。因为我一直打算用github pages做一个博客,现在已经学会用Hexo在github pages上做博客了。但是我一想:我一个pythoner,干嘛不用python写的静态网站生成器。我想应该是网上教程太少,那我今天就来搞一搞。顺便记录下来,整理出一个教程,希望一切顺利!


最终效果:blog.xueweihan.com

开始

1.首先用virtualenv创建一个env

mkdir blog
cd blog
virtualenv env
source env/bin/activate #激活环境

2.使用pip安装pelican和markdown

pip install pelican
pip install markdown

3.创建pelican目录结构

pelican-quickstart
# 根据提示进行设置 > Where do you want to create your new web site? [.]
> What will be the title of this web site? 削微寒
> Who will be the author of this web site? xueweihan
> What will be the default language of this web site? [en] zh
> Do you want to specify a URL prefix? e.g., http://example.com (Y/n)
> What is your URL prefix? (see above example; no trailing slash) blog.xueweihan.com
> Do you want to enable article pagination? (Y/n)
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] Asia/Shanghai
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n)
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n)
> Do you want to upload your website using FTP? (y/N) n
> Do you want to upload your website using SSH? (y/N) n
> Do you want to upload your website using Dropbox? (y/N) n
> Do you want to upload your website using S3? (y/N) n
> Do you want to upload your website using Rackspace Cloud Files? (y/N) n
> Do you want to upload your website using GitHub Pages? (y/N)
Done. Your new project is available at /Users/xueweihan/Documents/blog

文件结构如下:

blog/
├── content # 写的文章放这里
├── output # 生成的输出文件(发布的内容)
├── develop_server.sh
├── Makefile # 方便管理博客的Makefile
├── pelicanconf.py # 主配置文件
└── publishconf.py

我们下面只用到我解释的这几个目录和文件,大致有个印象即可

4.编写文章测试下效果

Date: 2016-02-28
Title: 测试
Tags: 测试
Slug: test # pelican
Pelican Static Site Generator, Powered by Python:Pelican是python语言写的静态网站生成器。因为我一直打算用git pages做一个博客,现在已经学会用Hexo在git pages上做博客了。但是我还是一想:我一个pythoner,干嘛不用python写的静态网站生成器。应该是网上教程太少,那我今天就来搞一搞。顺便记录下来,整理出一个教程,希望一切顺利!

在content目录下创建一个名为:test.md的markdown文件,把上面的那些内容放进去,用来测试效果。

5.本地查看效果

# 在blog目录下执行
pelican content # 根据content中的内容,生成静态网站到output目下 # 在output目录下执行
python -m pelican.server

以上两个命令执行完,没有报错的话就用浏览器打开:127.0.0.1:8000,效果如下:

输入:ctrl + c 停止服务

5.上传到github pages 现在就差最后一步,上传到github pages上面。 一步步的来:

首先在github上创建一个项目,Repository name填写:你的github用户名.github.io 如下图:

然后在output目录依次输入:

git init
git add .
git commit -m "pelican static blog test"
git remote add origin git@github.com:你的github用户名/你的github用户名.github.io.git
# 例如我的就是:git@github.com:521xueweihan/521xueweihan.github.io.git
git push -u origin master

最后访问:http://你的github用户名.github.io/ 例如我的就是:http://521xueweihan.github.io/

页面如下图:

简化发布流程

还记得Makefile文件吗?我们通过修改这个文件,实现1条指令发布博客到github pages上。

blog目录下的Makefile文件中的内容替换成下面的内容(原Makefile文件的内容都不要)

PY?=python
PELICAN?=pelican
PELICANOPTS= BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR) regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) serve:
ifdef PORT
cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) github: publish
cd $(OUTPUTDIR) ; git add . ; git commit -m '更新博客' ; git push origin master

更新博客流程

  1. 把写好的markdown格式的文章放到content中,然后在blog目录下
  2. 本地查看效果的话:make html 然后make serve 最后访问:127.0.0.1:8000
  3. 发布到github:make github 完成

定制属于自己的blog

下面的内容算是高级篇了,需要把上面的步骤都完成。想要进一步完美自己的博客的小伙伴

1.独立域名

首先要购买域名,我的实在阿里云上买的,买完之后就需要修改你的域名指向:访问blog.xueweihan.com域名,跳转到你的.github.io。根据你购买域名时候的提示,就可以设置完成了。之后在output目录下,创建CNAME文件。内容就是你购买的域名。因为github pages只允许CNAME中的域名映射。

2.定制样式结构

一步步的来,首先要找到你喜欢的主题pelican主题,下载的时候我推荐Download ZIP会快很多。下载好你的主题,我们就需要在blog目录下,找到pelicanconf.py文件,它是在生成静态网站时候的配置文件,定制几乎所有的东西都需要通过这个。增添内容如下:

THEME = '你的主题所在目录'
# 例如:THEME = '/Users/root/Documents/blog/tuxlite_tbs' GITHUB_URL = 'https://github.com/你的github用户名'
# 效果是右上角有个fork me on Github,点击进入你的Github主页 DEFAULT_DATE_FORMAT = '%Y-%m-%d'
# 时间格式 SOCIAL = (('github', 'https://github.com/521xueweihan'),
('博客园', 'http://www.cnblogs.com/xueweihan/'))
# 几乎所有的博客主题都有一个地方展示你的社交账号,这些账号就写在这里,上面是我的 DISQUS_SITENAME = 'shortname'
# 评论功能,需要在Disqus上申请一个站点,替换shortname

如果有python基础的,可以直接修改主题目录下的template中的模版。已达到你想要的目录结构和内容的呈现。

3.简单的SEO

在output文件中创建rebots.txt,这个文件是一个协议文件,没有不会影响什么。但是有的话,有利于搜索引擎的收录。内容如下,允许所有爬虫,同时不允许爬取theme目录下的内容,和所有的图片。:

User-agent: *
Disallow: /theme/
Disallow: /.gif$
Disallow: /.png$
Disallow: /.jpg$

大多数主题多是外国人写的,所以他们都支持‘谷歌分析’

GOOGLE_ANALYTICS = '跟踪ID'

而百度的分析就需要手动的在主题目录下的template目录下的base.html中增添百度的分析代码。

4.sitemap是对于爬虫友好的一个文件,它告诉爬虫,网站的更新频率和优先级等。详情

增添插件:

git clone git://github.com/getpelican/pelican-plugins.git

修改pelicanconf.py文件:

PLUGIN_PATH = u"pelican-plugins"
PLUGINS = ["sitemap"]
SITEMAP = {
"format": "xml",
"priorities": {
"articles": 0.7,
"indexes": 0.5,
"pages": 0.3,
},
"changefreqs": {
"articles": "monthly",
"indexes": "daily",
"pages": "monthly",
}
}

5.favicon.ico

放在output的根目录下。

6.订阅

因为pelican的库包含了feedgenerator。feedgenerator是用来生成Atom feeds(是包含你博客数据的xml的文件)用于订阅。所以你只需要在pelicanconf.py加入:

FEED_ALL_RSS =  'feeds/all.rss.xml'

博客就会自动生成订阅功能了。

7.关于我

这个就像相当于一个自我介绍的页面,所以就需要在content目录下创建一个pages目录,然后把你要展示的内容放到pages目录下就可以了。

最终效果

我的博客:blog.xueweihan.com

问题

  1. 当删除了一篇博文,但是以我上面所说的方式发布的话。那片文章其实还是存在于github pages上的。只不过没有在模版中生成链接罢了。这种类似的情况会导致:换主题css丢失等问题。当然如果你清空output目录,然后重新生成网站的话,就没问题。但是清空的话,会导致一切不因该被删的文件也都被删除了,例如:.git和CNAME等文件。所以我就写了一个del.sh,用于删除pelican生成的文件,其他哪些通用文件都不删除。这样暂时可以解决问题。

  2. 本来想要在两台电脑上都可以发布文章,修改完makefile我发现不是刚性需求,同时实现效果不好。最后的解决方案是,把文章写在另外的一个github的项目中,分布式编辑这个项目。最后写文章之前,git pull获取最新的文章,这样就可以同步最新的内容进行修改发布了。

  3. 我遇到的另外一个问题,就是pelican-theme上面大多都是国外的主题,有的主题中的jquery.js是用的google的cdn。在国内访问的时候会造成找不到jquery.js对体验和响应时间造成很大的影响。所以,部署完站点后,最好打开浏览器的开发者模式,查看一下各个文件的请求耗时。如果有我上述情况,那么你可以尝试把那个请求耗时过长的静态文件,下载好,放到该主题目录下static中对应的目录内。

  4. 这个其实不是问题,算是一个建议。文章的格式中,加入Slug: test。这个字段的是:用于文章生成url的。不添加这个字段话,默认是拼音的url。但是有时侯拼音是错误的,而且对于搜索引擎很不友好。

参考

[git]用pelican搞一个自己的blog(已完成)的更多相关文章

  1. 利用git+hugo+markdown 搭建一个静态网站

    利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...

  2. GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?

    问题背景:     最近在重新整理手中的一个项目,目前该项目分为PC项目,手机项目,某第三方接口项目,第三方接口服务项目和手机项目     因为之前规划的原因,原来的四个项目是分两个解决方案来管理的 ...

  3. 使用uliweb创建一个简单的blog

    1.创建数据库 uliweb的数据库都在models.py文件里面,因此先创建该文件 vim apps/blog/models.py 添加如下两行: #coding=utf-8 from uliweb ...

  4. [译]如何比较master分支上与git上任意的一个老版本的区别?

    原文来源:https://stackoverflow.com/questions/5586383/how-to-diff-one-file-to-an-arbitrary-version-in-git ...

  5. 分布式ID生成服务,真的有必要搞一个

    目录 阐述背景 Leaf snowflake 模式介绍 Leaf segment 模式介绍 Leaf 改造支持RPC 阐述背景 不吹嘘,不夸张,项目中用到ID生成的场景确实挺多.比如业务要做幂等的时候 ...

  6. 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。

    在部署到IIS7时,MVC3报了一个找不到资源的错误,文件肯定是有的,而且页面是肯定报错的,也就说内部运行错误了,而MVC把错误没有抛出来而已: 所以对症下药,发觉我的项目里面用了rexs进行多语言, ...

  7. MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。

    MVC3.0框架开发项目: 有时在程序运行的时候会出现“HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确.”的错 ...

  8. Git操作 :从一个分支cherry-pick多个commit到其他分支

    在branch1开发,进行多个提交,这时切换到branch2,想把之前branch1分支提交的commit都[复制]过来,怎么办? 首先切换到branch1分支,然后查看提交历史记录,也可以用sour ...

  9. Tensorflow搞一个聊天机器人

    catalogue . 前言 . 训练语料库 . 数据预处理 . 词汇转向量 . 训练 . 聊天机器人 - 验证效果 0. 前言 不是搞机器学习算法专业的,3个月前开始补了一些神经网络,卷积,神经网络 ...

随机推荐

  1. AD8275 Driver Amplifiers For Analog-To-Digital Converters

    Driver Amplifiers For Analog-To-Digital Converters What amplifiers are used to drive analog-to-digit ...

  2. Cracking Story - How I Cracked Over 122 Million SHA1 and MD5 Hashed Passwords

    This is the story about how I cracked 122 million* password hashes with John the Ripper and oclHashc ...

  3. asp.net“服务器应用程序不可用” 解决方法

    服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的“刷新”按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误消息可在 We ...

  4. 【转】兼容iOS 10 资料整理

    1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...

  5. 多线程socket编程示例

    工程: 代码: package com.my.socket.business; /** * 业务实现类 * * @author ZY * */ public class CoreMisBusiness ...

  6. 持续集成(二)环境搭建篇—内网邮件server搭建

    在我们的持续构建中,项目构建中出现错误提醒.或者开发者之间的沟通交流,进度汇报的事务,都是离不开一个通信工具.那就是邮件.在我们的项目开发中假设使用第三方的邮件平台,这肯定不是最好的选择.由于第三方的 ...

  7. Html5 localstorage解决Ajax回退的坑

    A页面通过ajax加载数据,并且是滚动加载效果,当滚动几个屏幕之后,进入新的链接页面B,再返回到A的时候,A页面的数据有需要重新加载,从头开始了,体验非常不好. 解决办法:1)hash:2)html5 ...

  8. 关于meta知多少

    本来打算写关于手机端的知识,想了想先从meta着手.接下来请大家看几个网站的例子. 一.天猫(http://m.tmall.com) <title>天猫触屏版</title> ...

  9. 阿里云里面的Linux 系统挂载数据盘

    转自:http://www.cnblogs.com/adjk/p/5112360.html 适用系统:非IO优化+SSD云盘Linux(Redhat , CentOS,Debian,Ubuntu)实例 ...

  10. ArcGIS与SuperMap的使用比较(1)

    用了超过6年的超图产品了,因此对超图的很多特性比较熟悉,去年开始接触ARCGIS,并用来研发了一些新产品,因此对于两个GIS平台有些感受,记录如下: 比较版本:ARCGIS10.1与SuperMap ...