iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Python

使用 Django 框架和 Wagtail,快速打造一個 CMS 網站系列 第 23

D23 - 快速的在 admin panel 中做出日曆

  • 分享至 

  • xImage
  •  

建立管理介面視圖

在 Wagtail 管理介面中新增自定義視圖的最常見用途是為管理 Django 模型提供介面。使用 Snippets,Wagtail 提供了預製的視圖,允許用戶以最少的配置來列出、創建和編輯 Django 模型。

對於不適合這種模式的其他管理介面視圖,你可以撰寫自己的 Django 視圖,並通過 hooks 將它們註冊到 Wagtail 管理介面中。接下來,我們將實作一個顯示當年度日曆的視圖,並使用 Python 標準庫中的 calendar 模組。

定義視圖

在 Wagtail 專案中,使用 ./manage.py startapp wagtailcalendar 創建一個新的 wagtailcalendar 應用,並將它添加到專案的 INSTALLED_APPS 中。(在這裡,我們使用 wagtailcalendar 作為應用名稱,以避免與標準庫的 calendar 模組名稱衝突——一般情況下,不需要為應用名稱加上 wagtail 前綴。)

編輯 views.py 文件,如下所示——請注意,這是一個普通的 Django 視圖,沒有任何 Wagtail 特定的代碼。

import calendar

from django.http import HttpResponse
from django.utils import timezone

def index(request):
    current_year = timezone.now().year
    calendar_html = calendar.HTMLCalendar().formatyear(current_year)

    return HttpResponse(calendar_html)

註冊 URL 路由

此時,對於 Django 專案的標準做法是將這個視圖的 URL 路由添加到專案的頂層 URL 配置模組中。然而,在這個例子中,我們希望該視圖僅對已登錄的用戶可見,並顯示在由 Wagtail 管理的 /admin/ URL 範圍內。這可以通過 Register Admin URLs hook 來實現。

在啟動時,Wagtail 會檢查每個已安裝應用中的 wagtail_hooks 子模組。在這個子模組中,你可以定義一些函數,在 Wagtail 的不同操作階段運行,例如構建管理界面的 URL 配置或構建主選單。

wagtailcalendar 應用內創建一個 wagtail_hooks.py 文件,內容如下:

from django.urls import path
from wagtail import hooks

from .views import index

@hooks.register('register_admin_urls')
def register_calendar_url():
    return [
        path('calendar/', index, name='calendar'),
    ]

現在,這個日曆將顯示在 /admin/calendar/ URL。

呈現在未經樣式設計的 HTML 中的日曆。
https://ithelp.ithome.com.tw/upload/images/20241004/20140622imsNsHqSSn.png


上一篇
D22 - Wagtail API 的應用 - custom field query 特殊欄位
下一篇
D24 - 加上客制化的 api 端點
系列文
使用 Django 框架和 Wagtail,快速打造一個 CMS 網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言