在django admin中添加自定義視圖


 

來自https://blog.csdn.net/qq_35753140/article/details/84881757

django admin提供了完善的用戶管理和數據模型管理,方便實用。研究了一下在admin里面添加自己的頁面。

在admin.py里繼承django.contrib.admin.ModelAdmin基類

class FaceAdmin(admin.ModelAdmin): 
  • 1

然后在里面寫自己的視圖處理函數。基類里面的save_modeldelete_model函數可以做數據對象的新建和刪除的預處理和后處理。自建的函數如果要redirect到自己建的view,反向映射要包含admin:,寫成

return HttpResponseRedirect(reverse('admin:manage_face_image', args=(face_id,))) 
  • 1

然后添加一個獲取路由的函數,把自己的路由添加上

def get_urls(self): urls = super().get_urls() my_urls = [ path('<int:face_id>/manage_face_image/', self.admin_site.admin_view(self.manage_face_image), name='manage_face_image'), path('<int:face_id>/<str:face_file>/delete_face_image/', self.admin_site.admin_view(self.delete_face_image), name='delete_face_image') ] return my_urls + urls 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最后把子類和數據模型一起注冊成admin的站點:

admin.site.register(Face, FaceAdmin) 
  • 1

這樣就可以通過/admin/app/face/5/manage_face_image/這個url來訪問自己的視圖了。詳細說一下,admin是指admin站點,app是指自己的djangoapp,face是數據模型。

自定義視圖的模板在最頂上繼承admin_site的基模板

{% extends "admin/base_site.html" %} 
  • 1

但是會發現右上角沒有正常的admin網站包含的歡迎信息和站點視圖以及修改密碼和注銷的鏈接。因為在base_site.html的基模板base.html中有一個判斷{% if has_permission %},這是django.contrib.admin.AdminSite類的一個屬性,返回的是user.is_active and user.is_staff,我們沒有繼承這個基類所以沒有這個屬性,其實base.html就在下面幾行也有這個判斷,方便起見直接把if has_permission這個判斷刪了就行了,雖然仍然沒有站點視圖,但是已經好看多了。還有一點要注意的是模板在用url時要加上admin:,寫成

{% url 'admin:manage_face_image' face_id %}


免責聲明!

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



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