日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入Django(1): 通用视图 (generic views)

發(fā)布時間:2023/12/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入Django(1): 通用视图 (generic views) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果對Django的基礎(chǔ)部分尚不熟悉,請參考《Django實戰(zhàn)》系列。

內(nèi)容提要
1. 回顧Django的視圖函數(shù)(view function)
2. 在視圖函數(shù)中使用模板
3. 簡化視圖函數(shù)的兩個工具
4. 使用通用視圖函數(shù)
5. Django提供的通用視圖

1. 回顧Django的視圖函數(shù)(view function)

Django中將視圖定義為一種函數(shù),我們稱其為視圖函數(shù)(view function)。當Django框架接收到http請求的時候,從定義的urlpatterns中尋找url表達式進行匹配,一旦找到匹配的項,就將HTTPRequest以及匹配到的其他字符串作為參數(shù),調(diào)用找到的視圖函數(shù),然后根據(jù)視圖函數(shù)返回的HTTPResponse對象進行響應(yīng)。所以視圖函數(shù)應(yīng)該至少接收一個django.http.HTTPRequest對象作為參數(shù),并返回django.http.HTTPResponse對象,如下:

def my_view(request, *args, **kwargs): response = HTTPResponse() … ... return response

?

2. 在視圖函數(shù)中使用模板

視圖函數(shù)返回的response對象中包含一些頭(Header)信息和內(nèi)容(Content),而我們通常通過模板來生成內(nèi)容,所以我們經(jīng)常用到的視圖函數(shù)應(yīng)該是這樣:

?

def my_view_with_template(request, *args, **kwargs): var1 = foo var2 = bar t = get_template('path_name_of_template_file') c = Context({'key1':var1,'key2':var2}) content = t.render( c) return HTTPResponse(content)

?

3. 簡化視圖函數(shù)的兩個工具

總是寫這樣的代碼實在是讓人厭倦,所以Django為我們提供了兩個有用的工具:
一個是django.shortcuts.render_to_response函數(shù),接收一系列的參數(shù),包括模板路徑、context使用的字典、原始的context實例以及要設(shè)定的mimetype等:
???? render_to_response(template_path_name, dictionary=None, context_instance=None, mimetype=None)
另一個是locals()函數(shù),將所有的局部變量組裝成一個字典。
有了這兩個工具,視圖函數(shù)就可以這樣寫:

def my_view_with_template(request, *args, **kwargs): var1 = foo var2 = bar return render_to_response('path_name_of_template_file', locals())

?

4. 使用通用視圖函數(shù)

有了這兩個工具,編寫視圖函數(shù)確實可以簡化很多。但是這樣你就滿意了嗎?Django并沒有就此止步,更進一步注意到,很多視圖函數(shù)其實都在做同樣的事情,比如顯示一組模型對象的列表,顯示模型對象的詳細信息,對模型對象的增、刪、改操作等。為了簡化對這些情況的處理,Django定義了一系列的通用視圖(generic views),我們只需要使用這些內(nèi)置的通用視圖函數(shù),而無需自己編寫就可以實現(xiàn)相應(yīng)的功能。

使用通用視圖的方法是在URLconf文件中創(chuàng)建參數(shù)字典,將字典作為URLconf元組的第三個成員,即可自動在調(diào)用視圖函數(shù)時向其傳遞參數(shù)了。比如在django.views.generic.list_detail模塊中的object_list函數(shù),用于顯示模型對象的列表,可以接受queryset參數(shù)作為模型對象的結(jié)果集。如果我們要用該視圖函數(shù)顯示在《Django實戰(zhàn)》系列中的創(chuàng)建的第一個模型類Product的列表,可以在URLconf中這樣配置:

from django.conf.urls.defaults import * from django.views.generic import list_detail from depot.depotapp.models import Product product_info = { 'queryset': Product.objects.all(), } urlpatterns = patterns('', (r'^product/list/$', list_detail.object_list, product_info) )

?

除了queryset外,object_list函數(shù)還可以接收許多其他的參數(shù):

?

object_list(request, queryset, paginate_by=None, page=None, allow_empty=True, template_name=None, template_loader=loader, extra_context=None, context_processors=None, template_object_name='object', mimetype=None )

?

通用視圖函數(shù)接收到參數(shù)后,會創(chuàng)建context,并渲染模板,最后返回HTTPResponse對象。object_list函數(shù)創(chuàng)建的context中會包含以下字典項:

? object_list???????????? 要顯示的對象的list
? is_paginated???????? 是否分頁
? results_per_page 如果分頁,存儲每頁記錄數(shù)
? has_next????????????? 是否有下一頁
? has_previous?????? 是否有上一頁
? page???????????????????? 當前頁碼
? next????????????????????? 下一頁
? previous?????????????? 上一頁
? pages?????????????????? 總頁數(shù)
? hits?????????????????????? 總條目數(shù)
? last_on_page?????? 本頁最后錄一條記錄的序數(shù)(從1開始)
? first_on_page?????? 本頁第一條記錄的序數(shù)(從1開始)
? page_range????????? 頁碼范圍的列表

如果這些context字典項不能滿足你的需要,還可以通過指定extra_context參數(shù),傳入一個字典,該字典中的內(nèi)容會被合并到context字典中。

context字典項會被模板使用。如果不指定模板,該函數(shù)將使用[app_name]/[model_name]_list.html作為模板,指定模板的方法也是通過參數(shù)字典,比如:

product_info = { 'queryset': Product.objects.all(), 'template_name': 'depotapp/another_product_list.html'), ?}

這個參數(shù)字典會傳入template_name參數(shù)來指定渲染的模板文件。

5. Django提供的通用視圖

除了object_list外,Django還提供了許多通用視圖函數(shù),分布在幾個模塊中:

django.views.generic.list_detail模塊

  • object_list????? 顯示模型對象列表???
  • object_detail? 顯示單個模型對象

django.views.generic.create_update模塊

  • create_object??? 創(chuàng)建模型對象
  • update_object?? 修改模型對象
  • delete_object??? 刪除模型對象

django.views.generic.simple模塊

  • direct_to_template?? 直接使用指定的模板渲染給定的context對象
  • redirect_to?? 重定向到指定的url

django.views.generic.date_based模塊

這個模塊主要處理“按時間查看存檔”的功能,來源于新聞出版行業(yè)。具體包括:

  • archive_index?? 最頂級的歸檔,列出所有年份及指定數(shù)量的最新對象
  • archive_year???? 按年歸檔,列出所有擁有對象的月份
  • archive_month?? 按月歸檔,列出本月的所有對象,找到擁有對象的上一個、下一個月份
  • archive_week???? 按周歸檔,列出本周的所有對象
  • archive_day???? 按日歸檔,列出當天的所有對象,找到擁有對象的上一個、下一個日期
  • archive_today???? 當前日期(今天)的按日歸檔
  • object_detail???? 顯示按照年/月/日/序號找到的對象

這些通用視圖函數(shù)不再一一介紹,可以參考Django API文檔,關(guān)注其參數(shù),context內(nèi)容和默認模板,就能基本掌握其使用。

總結(jié)

以上是生活随笔為你收集整理的深入Django(1): 通用视图 (generic views)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草资源网站 | 亚洲综合在线视频 | 国产精品一区二区三区久久久 | 精品人妻一区二区三区免费 | 青草成人免费视频 | 男女偷爱性视频刺激 | 久久男女视频 | 欧美二级片 | 华人色 | 中文字幕乱码亚洲精品一区 | 亚洲av无码精品色午夜 | 欧美成人xxxx| 久操久| 四川丰满妇女毛片四川话 | 老头av | 伊人日日夜夜 | 免费在线国产视频 | 四虎永久免费在线观看 | 亚洲精品1区2区3区 国产丝袜网站 | 丝袜制服中文字幕 | 毛片免费播放 | 色亚洲影院 | 国产福利小视频在线观看 | 国产爆乳无码一区二区麻豆 | 午夜视频在线观看视频 | 草草草在线视频 | 国产欧美一区二区三区视频在线观看 | 成人三级电影网站 | 黑人精品一区二区三区不 | 国产欧美在线播放 | 精品国产99久久久久久 | 天堂中文资源在线观看 | 全黄一级播放 | 国产野外作爱视频播放 | 久久婷婷精品 | 欧美高清成人 | 韩国精品一区二区三区 | 中文字幕高清在线免费播放 | 精品熟女一区 | 国产69精品久久久久久久 | av在线首页| 成人第一页 | 国产成人精品一区二区三 | 色播综合网 | 手机在线看永久av片免费 | 超碰蜜桃 | 色超碰| 中国黄色一级毛片 | 毛片一区二区三区 | 天天干免费视频 | 99国产精品国产免费观看 | 日韩精品视频一区二区三区 | 久久久久久av无码免费网站下载 | 久久国产视频网 | 色老头在线一区二区三区 | 人妻av无码一区二区三区 | 99精品久久精品一区二区 | 久久成人国产精品 | 国产123在线 | 天堂在线观看av | 国产精品99999 | 打开免费观看视频在线 | 热热av| 手机av免费观看 | 国产成人亚洲精品 | 狠狠摸狠狠操 | 久久婷婷综合色 | 国产成人无码a区在线观看视频 | 国产精品zjzjzj在线观看 | 欧美性猛交乱大交 | 中文字幕一区三区 | 狠狠干狠狠操 | 午夜在线观看视频网站 | 天天干夜操 | 国产一区二区三区视频在线播放 | 射久久久 | 国产不卡精品视频 | 女生下面流水视频 | 2017日日夜夜 | 黄色av片三级三级三级免费看 | xxx精品| 午夜av免费在线观看 | 国产在线播 | 亚洲无码精品在线观看 | 日日躁夜夜躁aaaabbbb | 日韩高清专区 | 精品综合在线 | 91久热| 日本伦理片在线播放 | 不卡的av在线免费观看 | 99久久精品国产毛片 | 麻豆蜜桃wwww精品无码 | 国产尤物av | 亚洲欧美变态另类丝袜第一区 | 成人黄色片免费看 | 美国一级大黄一片免费中文 | 久久久久久久极品 | 天天干天天干天天干天天 | 六月丁香婷婷网 |