Django 基於類的視圖源碼分析 三 原

列表類通用視圖(list.py)

此文件包含用於顯示數據列表常用的類和工具類。不僅可以方便的用於顯示基於模型(Model)的數據列表,也可以用於顯示自定義數據列表。

list.py類圖

此圖中綠色部分屬於base.py,引入此圖中是爲了說明他們之間的關係

MultipleObjectMixin

最主要的核心工具類,主要的算法和接口全部都在這個工具類中實現。

  • 屬性

allow_empty 默認值True。表示沒有數據時顯示空列表;否則將會產生一個404錯誤。

queryset 產生數據的queryset實例或"類queryset"數據列表。

model 關聯的模型類。

paginated_by 分頁的每頁數據項數。默認不起用分頁。

context_object_name 保存到context中的對象名稱。默認是$(model)_list。

paginator_class 默認值Paginator。分頁處理器。

  • 方法

get_queryset 獲取用於數據顯示的列表對象。可以是類queryset對象。此方法優先選擇使用queryset屬性。未提供queryset屬性時,返回model的默認管理器。如果也沒有提供model屬性,將會產生ImproperlyConfigured異常。

paginate_queryset 根據需要,將queryset分頁。返回(paginator, page, page.object_list, page.has_other_pages())

get_paginate_by 返回每頁數據項數。None表示不分頁。

get_paginator 返回分頁器

get_allow_empty 參見allow_empty屬性說明

get_context_object_name 參見context_object_name屬性說明

get_context_data 設置視圖的附加屬性。通常重寫此方法來爲視圖提供附加數據。 默認設計的視圖數據:

'paginator': 分頁器, 'page_obj': 頁對象, 'is_paginated': 是否進行了分頁, 'object_list': 視圖的數據

BaseListView

視圖列表基類。繼承自MutipleObjectMixin和View。這是一個抽象類。此函數通過增加get方法來整合View的處理流程和MutipleObjectMixin提供的工具函數。

MultipleObjectTemplateResponseMixin

繼承自TemplateResponseMixin,並重寫get_template_names方法。追加$(app_label)/$(model)_list.html作爲默認模板。

ListView

本模塊功能集大成者。一般都是直接繼承此類,並重寫MutipleObjectMixin的一些默認屬性和/或方法來實現需求。

此類繼承自MultipleObjectTemplateResponseMixin和BaseListView。一般來說,只需提供model屬性,並編寫$(model)_list.html即可實現數據列表功能。如需分頁可以重寫paginated_by屬性,指定每頁數據項數目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章