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

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

此文件包含用於顯示數據列表經常使用的類和工具類。不只能夠方便的用於顯示基於模型(Model)的數據列表,也能夠用於顯示自定義數據列表。html

list.py類圖

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

MultipleObjectMixin

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

  • 屬性

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

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

model 關聯的模型類。設計

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

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屬性,指定每頁數據項數目。

相關文章
相關標籤/搜索