Mezzanine 搭建 BLOG 系統

ciscopuke發表於2021-09-09
Mezzanine 搭建 BLOG 系統

1. 建立 python 虛擬環境

  • 檢視虛擬環境列表:
    conda info --envs

  • 建立虛擬環境 mezzenv:
    conda create -n mezzenv python=3

  • 進入虛擬環境 mezzenv:
    source activate mezzenv

2. 安裝 Mezzanine

  • pip install mezzanine

3. 新建 mezzblog 專案

  • mezzanine-project mezzblog

  • cd mezzblog

  • python manage.py createdb

  • python manage.py runserver 0.0.0.0:8066

4. 後臺管理 Mezzanine 配置

  • 訪問

    預設賬號:admin

    預設密碼:default

  • 進入 Content > Pages 配置導航、 頁尾資訊

  • 進入 Content > Blog posts 新增分類、釋出文章

  • 進入 Site > Settings 配置網站 Site Title、Tagline

5. 透過配置檔案修改模板風格

mezzblog
    └── mezzblog
           ├── __init__.py
           ├── settings.py
           ├── local_settings.py
           ├── urls.py
           ├── wsgi.py

修改 mezzblog/mezzblog/settings.py 檔案:

  • 配置 Homepage 為 Blog:

    註釋程式碼:#url("^$", direct_to_template, {"template": "index.html"}, name="home"),

    取消註釋: url("^$", "mezzanine.blog.views.blog_post_list", name="home"),

  • 去掉導航欄 Search 輸入框的可選項:

    新增配置項:SEARCH_MODEL_CHOICES = []

  • 去掉左側邊連和頁尾:

    新增配置項:PAGE_MENU_TEMPLATES = ( (1, "Top navigation bar", "pages/menus/dropdown.html"), )

    Tips: 要完全去掉左側邊連和頁尾,還要修改模板檔案base.html。稍後第 8 小節介紹 base.html 在哪,以及如何修改

6. 配置 mezzblog 主題樣式

  • 在新建中新建一個應用,命名為theme:

    python manage.py startapp theme
  • theme 目錄下只保留 __init__.py 檔案,其他刪除:

    mezzblog           
        └── theme
               ├── __init__.py
  • 自定義 theme/static/css/custom.css 樣式檔案,覆蓋預設樣式:

    mezzblog 
        └── theme
               ├── __init__.py
               └── static
                     └── css
                        ├── custom.css
    
  • theme 應用新增到 mezzblog/mezzblog/setting.py

    INSTALLED_APPS = (
        "theme",
        "django.contrib.admin",
        "django.contrib.auth",
        # ...
    )

7. 修改 mezzblog 模板佈局

將 Mezzanine 的原始模板彙集到 theme 應用下,覆蓋預設模板:

  • 執行 python manage.py collecttemplates 會在專案根目錄生成模板檔案目錄 templates

  • templates 移動到 theme 應用下:

    mezzblog 
        └── theme
               ├── __init__.py
               └── static
                     └── css
                        ├── custom.css
    
               └── templates
                    ├── base.html
                    ├── ...
  • 去掉左側邊連和頁尾(先在 settings.py 檔案新增相應配置,見第 5 小節):

    1. 刪除 base.html 檔案中的 3 處程式碼:

      {% page_menu "pages/menus/tree.html" %}
      {% page_menu "pages/menus/footer.html" %}
    2. 調整佈局元素寬度,將左邊欄佔據寬度減小,中間正文部分寬增加:

       
      {% block left_panel %} {% endblock %}
      {% block main %}{% endblock %}

      Tips: 透過修改 Bootstrap 柵格佈局樣式 col-md-* 實現

8. 彙集 Mezzanine 靜態檔案

執行 python manage.py collectstatic 命令,將 Mezzanine 原始靜態檔案和自定義的 custom.css 全部複製到 theme 應用下。這樣,可以在專案中重寫靜態資原始檔,方便部署靜態服務。

9. 配置 DEBUG = False

在本地開發時,settings.py 中預設 DEBUG = True,Django 不會限制訪問來源,並且會自動尋找靜態檔案。

當設定 DEBUG = False 時,可能會產生兩個問題,可以嘗試按以下方式解決:

  1. Bad Request(400) 錯誤

    settings.py 配置:

     ALLOWED_HOSTS = ['*']
  2. 找不到專案的靜態資原始檔

    urls.py 加入:

     from django.views.static import serve as static_serve
    
     if settings.DEBUG is False:
        urlpatterns += [
            url(r'^static/(?P.*)$', static_serve, {'document_root': settings.STATIC_ROOT}),
        ]

10. 結語

至此,透過 Mezzanine 搭建 Blog 的專案結構基本完成,後續樣式和佈局的修改在 theme 應用下修改即可。

用 Mezzanine 搭建 Blog 對於新手最大的阻礙在弄不清去哪修改模板和樣式,模板和樣式檔案在建立專案時並沒有自動生成。

需要執行以下兩條關鍵命令,在當前專案下生成模板和靜態檔案:

        python manage.py collecttemplates
        python manage.py collectstatic

注:本人主要從事前端方向開發,剛接觸 Django 不久,以上理解難免有誤。歡迎留言指出~

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2798943/,如需轉載,請註明出處,否則將追究法律責任。

相關文章