FeinCMS Tutorial
FeinCMS是个基于django框架的开源CMS系统,简单高效,集成在django自身的admin界面中,用来做个blog、网站什么的非常方便。不过它的官方文档中没有一个合适的Tutorial,所以比较难以上手。这里把我安装FeinCMS的经历写下来作为Tutorial吧。
以下内容基于python-2.6, django-1.4, FeinCMS-1.6.2,操作系统为MacOS 10.5 + MacPort。
首先要安装FeinCMS。FeinCMS要求django-1.3或django-1.4,如果你没安装过django,请先用以下命令安装:
$ sudo easy_install django
另外FeinCMS还要求mptt,需要先安装mptt:
$ sudo easy_install django-mptt
如果你以前没安装过PIL,还需要安装PIL:
$ sudo easy_install pil
然后就可以安装FeinCMS了:
$ sudo easy_install feincms
接下来我们用FeinCMS建个最基本的网站。首先建个django项目:
$ django-admin.py startproject fein
$ cd fein
需要注意的是,以前django-1.3建立的项目中是没有同名子目录(即fein/fein
)的,而django-1.4把settings.py
、urls.py
等移动到了项目同名子目录(fein/fein
)中,在项目外层目录(fein
)里只保留了manage.py
。这没关系,如果你使用django-1.3,可以直接在fein
目录下继续以下操作。
然后要编辑fein/settings.py
,加上数据库配置,并顺便在开头加上PROJECT_PATH
这个快捷变量。这里为了演示方便起见,就使用SQLite3了。
import os
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'fein.db',
}
}
我们先来试运行一下:
$ python manage.py syncdb
$ python manage.py runserver
第一条命令会提示创建管理员,按照提示输入即可。执行第二条命令后就能在http://localhost:8000/
看到django的欢迎画面了。到现在为止,这还只是个django项目,跟FeinCMS完全没有关系。
接下来要编辑fein/settings.py
中的INSTALLED_APPS
以加载FeinCMS,同时去掉django admin的两个模块前的注释,以启用django的管理界面:
INSTALLED_APPS = (
...
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
'django.contrib.admindocs',
'feincms',
'feincms.module.page',
'feincms.module.medialibrary',
)
修改上传和静态文件的相关设置:
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
STATIC_URL = '/static/'
然后修改fein/urls.py
,打开管理员设置,并将所有请求都转给FeinCMS。顺便设置media目录的访问请求:
import os
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the admin/doc line below to enable admin documentation:
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': os.path.join(os.path.dirname(__file__), 'media/')}),
url(r'', include('feincms.urls')),
)
然后更新数据库并启动服务器看看:
$ python manage.py syncdb
$ python manage.py runserver
访问http://localhost:800
,竟然出错了!错误信息是The page module requires a 'Page.register_templates()' call somewhere ('Page.register_regions()' is not sufficient).
。这是什么原因?
这是因为我们还没有注册模板,FeinCMS不知道该怎样渲染页面。好吧,先弄个最简单的模板挂上去。由于模板注册(Page.register_templates
)必须在每个请求开始时执行,所以官方文档推荐放到models.py
里,但我们的项目里没有modles.py
啊。这是当然,因为我们还没有建立app呢。由于使用django-admin.py startapp
会建个新的子目录,所以如果我们只是弄个CMS的话,干脆把当前目录当成app目录好了。在settings.py
所在的目录下建立models.py
(即fein/models.py
),内容如下:
from django.utils.translation import ugettext_lazy as _
from django.db import models
from feincms.module.page.models import Page
from feincms.content.richtext.models import RichTextContent
from feincms.content.medialibrary.v2 import MediaFileContent
Page.register_templates({
'key': 'base',
'title': 'Base Template',
'path': 'base.html',
'regions': (
('main', 'Main Region'),
('sidebar', 'Sidebar'),
),
})
Page.create_content_type(RichTextContent)
Page.create_content_type(MediaFileContent, TYPE_CHOICES=(
('default', _('default')),
('lightbox', _('lightbox')),
))
最后两行调用create_content_type
来创建两种Content Type,即页面内容的类型。然后编辑settings.py
,把当前目录加到INSTALLED_APPS
里:
INSTALLED_APPS = (
...
'fein', # 当前项目的名称
),
然后我们还要建个模板(上面代码中的base.html
),建个最简单的就好。
$ mkdir fein/templates
$ vi fein/templates/base.html
<div id="content">
{% block content %}
{% for content in feincms_page.content.main %}
{{ content.render }}
{% endfor %}
{% endblock %}
</div>
<div id="sidebar">
{% block sidebar %}
{% for content in feincms_page.content.sidebar %}
{{ content.render }}
{% endfor %}
{% endblock %}
</div>
顺便把上传目录和静态文件目录建起来:
$ mkdir fein/{static,media}
编辑fein/settings.py
加上模板目录:
TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'templates'),
}
重建数据库并启动:
$ rm fein.db
$ python manage.py syncdb
$ python manage.py runserver
访问http://localhost:8000/
,现在应该提示404错误了,那是因为我们还没简历任何页面。好,现在访问http://localhost:8000/admin
,就能看到FeinCMS的管理界面了。在Pages里建个页面试试吧。
还有一个小问题,那就是文本编辑器还不能编辑富文档。那是因为我们还没状TinyMCE这个富文档编辑器的缘故。
下载TinyMCE,然后把tiny_mce.js
放到fein/static/js/
下。然后修改fein/settings.py
,增加以下内容:
FEINCMS_RICHTEXT_INIT_CONTEXT = {
'TINYMCE_JS_URL': STATIC_URL + 'js/tiny_mce/tiny_mce.js',
}
这样FeinCMS就装好了,去后台管理界面添加点内容试试看吧。