Django實現自定義template頁面並在admin site的app模塊中加入自定義跳轉鏈接(二)


在文章 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 admin
from django.shortcuts import render
from models import Feedback, Feedback_Stat
from 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頁面:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM