標籤:none 這一 圖片 blog ref 分享 pre info 沒有
在文章 Django實現自訂template頁面並在admin site的app模組中加入自訂跳轉連結(一) 中我們成功的為/feedback/feedback_stats/路徑自訂了使用template文法的html檔案,完成了通過相應連結跳轉到自訂統計頁面的功能,但是沒能夠在admin site中FEEDBACK app模組下成功的添加顯示的跳轉連結,使使用者想要訪問自訂連結時無法從admin site頁面方便、快速的跳轉過去。
Django作為一個廣泛使用、已經相當成熟的web 架構,當然應該支援admin site頁面添加自訂連結的功能,只不過Django新手沒有看過相關資料的話,很難想到應該如何?這一功能,我自己之前在網上也是找了很久的資料,不知道是問題描述不對,還是這方面資料確實很少,並沒能從網上找到正確的實現方法,最近經過同事的指教,才恍然大悟。
思路:要在admin site中添加一個自訂的跳轉連結,首先考慮要如何才能在對應的app下添加一個新的跳轉連結,這裡以FEEDBACK模組為例,什麼情況會導致其下會產生新的跳轉串連呢?最常見的情況顯然就是在其下增加一個對資料庫進行映射的model,以及對應的modeladmin,那麼是不是可以把這個對應資料表model的跳轉連結重新導向到我們自訂的連結呢?這樣問題就轉化成了admin site中modeladmin的跳轉連結是否可以重載的問題,這也正是在admin site某個app模組下添加自訂跳轉連結的解決方案,即對modeladmin的預設跳轉行為進行重寫,使其指向自訂的跳轉頁面,從而實現app模組下增加自訂跳轉連結的功能。
由於對應的資料表model其實只是提供了一個產生admin site下跳轉連結的功能,其實際並沒有被訪問過,所以並不需要為其定義任何實際欄位,構造一個空的fake model即可,如下為models.py中對應fake model的代碼:
class Feedback_Stat(models.Model): pass
這個是admin.py中對應FeedbackStatsAdmin的代碼,其重寫了modeladmin負責預設頁面渲染行為的changelist_view函數實現了對自訂頁面的渲染:
from django.contrib import adminfrom django.shortcuts import renderfrom models import Feedback, Feedback_Statfrom views import feedback_stats@admin.register(Feedback_Stat)class FeedbackStatsAdmin(admin.ModelAdmin): def changelist_view(self, request, extra_content=None): return feedback_stats(request)
添加如上代碼後,admin site頁面如下:
其中Feedback_stats即是代表對應FeedbackStatsAdmin的連結,點擊後由於重寫了其changelist_view方法,其將會跳轉到使用者自訂的feedback_stats頁面:
Django實現自訂template頁面並在admin site的app模組中加入自訂跳轉連結(二)