django-blog-zinnia 雖然小巧,可是具有了我的博客應用的所有基礎功能,且具備很高的拓展性,而且開箱即用。如下是官方列出的一些特性:css
評論html
站點地圖(用於搜索引擎優化)python
文章歸檔視圖(自動按時間歸檔博文,包括年、月、星期、日各個時間維度)git
RSS 或者 Atom Feedgithub
分類和標籤雲web
全文搜索sql
Markdown 語法標記數據庫
等等其餘一些博客應用具有的所有基本功能。django
你能夠參照它的官方文檔 ( django-blog-zinnia documentation ) 的 installation 部分進行初始的安裝,但本文也會給出詳細的安裝教程,並對相關的細節進行進一步補充,對功能進行進一步地拓展設置。bootstrap
注:本博客在寫做時每個步驟均在實際環境下測試了一遍,確保沒有問題。可是因爲我的寫做時的疏忽或者計算機環境的差別,也可能會有一些錯誤致使你卡在某個地方沒法繼續進行下去。若是是這樣請首先仔細看文中步驟和代碼,尤爲要注意版本兼容問題。
python 2.7,zinnia 0.16,sqlite3
安裝代碼:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.8.2 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-blog-zinnia==0.16 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple markdown pip install django-app-namespace-template-loader pip install zinnia-theme-bootstrap # 若是提示 pip 找不到,請先安裝python包管理器 pip: https://pip.pypa.io/en/latest/installing/#id7 ####若是沒有安裝python包管理器 pip,也能夠直接基於本地代碼安裝: #先下載 https://github.com/Fantomas42/django-blog-zinnia/archive/v0.16.zip #而後 cd django-blog-zinnia #最後 python setup.py install #tips:一些必要的依賴 pip 其會自動幫咱們安裝,可是一些拓展依賴須要咱們手動安裝,包括: pip install markdown 安裝 markdown,以便使博客文章支持 markdown 格式的文本。 pip install pygments 安裝 pygments,以便支持代碼語法高亮。 #下載安裝 sqlite3 https://sqlite.org/2017/sqlite-dll-win64-x64-3160200.zip
再次提醒,必定要注意版本問題,這個項目涉及到的插件不少,很容易有系統環境和插件版本不兼容的問題。
進入你喜歡的目錄,經過命令 python C:\Python27\Scripts\django-admin.py startproject demo
建立一個 django 工程。這裏 demo 是項目名,能夠取任何你喜歡的名字。此時你會發現多了一個名爲 demo 的目錄,這樣 django 工程就創建好了,目錄結構以下:
C:\Users\Jun\Desktop\demo>tree /F 卷 win8.1 的文件夾 PATH 列表 卷序列號爲 C0000100 7E66:869B C:. │ manage.py │ └─demo settings.py settings.pyc urls.py urls.pyc wsgi.py wsgi.pyc __init__.py __init__.pyc C:\Users\Jun\Desktop\demo>
進入到 demo/demo (固然你可能設置了其餘項目名,但我相信你能找到),打開 settings.py 文件(用文本編輯器或者 python IDE 打開,不要直接運行),在 INSTALL_APPS 列表裏添加如下的 APP,這些 APP 都是 django-blog-zinnia 依賴運行的 APP,項目正常運行前咱們要先進行一些設置 :
demo/demo/settings.py INSTALLED_APPS = [ # 工程創建時默認添加的app 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 項目新添加的app 'django.contrib.sites', 'django_comments', 'mptt', 'tagging', 'zinnia_bootstrap', 'zinnia', ]
在 TEMPLATES 列表的以下位置加入 zinnia.context_processors.version ,固然這一步是可選的,其做用只是在博客頁面的底部顯示一個django-blog-zinnia 的版本號:
demo/demo/settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 一、這裏 True 改爲 False 'APP_DIRS': False, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', # 二、添加這句 'zinnia.context_processors.version', # Optional ], # 三、添加下面這幾行 'loaders': [ 'app_namespace.Loader', 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], }, }, ]
在 ALLOWED_HOSTS = [] 的下面添加 SITE_ID = 1
demo/demo/settings.py ALLOWED_HOSTS = [] # 新加2行 SITE_ID = 1 ZINNIA_MARKUP_LANGUAGE = 'markdown'
並修改語言和時區,得到更友善的語言和時間顯示,注意 + 號表示添加的行,- 號表示刪去的行:
demo/demo/settings.py # + 號表示添加的行,- 號表示刪去的行 - LANGUAGE_CODE = 'en-us' + LANGUAGE_CODE = 'zh-hans' - TIME_ZONE = 'UTC' + TIME_ZONE = 'Asia/Shanghai'
整個文件源碼以下,僅供參考:
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '#+u%&dk@p%yt526^)$o7#*4)w$d)u)s!sytfipfbtb#iohu6ph' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_comments', 'django.contrib.sites', 'mptt', 'tagging', 'zinnia_bootstrap', 'zinnia', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', ) ROOT_URLCONF = 'demo.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': False, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'zinnia.context_processors.version', # Optional ], 'loaders': [ 'app_namespace.Loader', 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], }, }, ] WSGI_APPLICATION = 'demo.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' SITE_ID = 1 USE_I18N = True USE_L10N = True USE_TZ = True STATIC_URL = '/static/' #ZINNIA_MARKUP_LANGUAGE = 'restructuredtext' ZINNIA_MARKUP_LANGUAGE = 'markdown' #ZINNIA_MARKDOWN_EXTENSIONS = ['markdown.extensions.extra', 'markdown.extensions.codehilite']
打開相同目錄下的 urls.py 文件,直接用下面的代碼替換 demo/demo/urls.py 內容,整個 urls.py 以下:
demo/demo/urls.py from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^blog/', include('zinnia.urls', namespace='zinnia')), url(r'^weblog/', include('zinnia.urls', namespace='zinnia')), url(r'^comments/', include('django_comments.urls')), ]
在 manage.py 文件所在目錄下輸入 python manage.py migrate 創建相應的數據庫表結構。此時會看到目錄下多了一個 db.sqlite3 文件,這是存儲博客數據的數據庫文件,默認使用的 sqlite3。輸入命令 python manage.py createsuperuser 建立後臺管理員帳戶,命令行會提示你輸入用戶名、郵箱、密碼。注意密碼輸入時不會有任何顯示,只管輸下去就行。
在 manage.py 文件所在目錄下輸入 python manage.py runserver 啓動服務器,在瀏覽器輸入 127.0.0.1:8000/weblog 將看到博客的首頁面。輸入 127.0.0.1:8000/admin 會進入後臺登陸頁面,輸入剛纔建立的管理員帳戶用戶名和密碼就能夠登陸到後臺管理界面。在日誌後面點擊增長按鈕嘗試着添加一篇博客看看!再次進入 127.0.0.1:8000/weblog 就能夠看到剛纔發表的博客了,至此基本的博客已經搭建完畢。
C:\Users\Jun\Desktop\demo>sqlite3 db.sqlite3 SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> .tables auth_group django_session auth_group_permissions django_site auth_permission tagging_tag auth_user tagging_taggeditem auth_user_groups zinnia_category auth_user_user_permissions zinnia_entry django_admin_log zinnia_entry_authors django_comment_flags zinnia_entry_categories django_comments zinnia_entry_related django_content_type zinnia_entry_sites django_migrations sqlite>
另外,可使用 .dump 或 .schema ,導出表結構和數據。
好比你想修改標題,語法高亮、側邊欄的內容等等,就須要修改相應的模板了。
爲了方便起見,咱們新建一個 APP 來存放個人須要引入的 css 樣式文件,在 demo/ 目錄下(與 manage.py 同級)下輸入 python manage.py startapp theme,這樣咱們就建立了一個名爲 theme 的 app,能夠看到 demo/ 多了一個 theme 的文件夾。
在 demo/ 目錄下(與 manage.py 同級)創建以下的目錄結構和文件:
demo/templates/zinnia/skeleton.html,把這裏面的內容:skeleton 模板代碼 ,複製到 skeleton.html中,而且在 skeleton.html 中作你想要的修改便可。
再在 zinnia_demo/ 下創建以下的目錄結構和文件:
demo/theme/static/theme/css/github.css,把這裏面的內容:github.css 樣式代碼 ,複製到 github.css 文件中。
打開 settings.py 文件,作以下修改:
demo/demo/settings.py TEMPLATES = [ { ... # 修改爲下面的樣子,做用是指明模板文件所在目錄,即上面咱們寫的skeleton.html 'DIRS': [os.path.join(BASE_DIR, 'templates')], ... } ]
將 theme app 註冊到 INSTALLED_APPS 列表中:
demo/demo/settings.py INSTALLED_APPS = [ ... 'theme', 'zinnia_bootstrap', 'zinnia', ]
啓動web服務器,進入相應頁面就能夠看到修改後效果了。
[1] Installation
http://docs.django-blog-zinnia.com/en/develop/getting-started/install.html
[2] 使用 django-blog-zinnia 搭建我的博客
https://segmentfault.com/a/1190000006839238
[3] 邊作邊學,Python&Django實戰教程-02本地搭建Django博客
https://zhuanlan.zhihu.com/mazhifeng
[4] SQLite3查詢表結構
http://blog.csdn.net/guanhuhousheng/article/details/6933209