亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

在Django中創建URLconf相關的通用視圖的方法

2020-01-04 18:02:03
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了在Django中創建URLconf相關的通用視圖的方法,Django是Python重多人氣框架中最為著名的一個,需要的朋友可以參考下

抽取出我們代碼中共性的東西是一個很好的編程習慣。 比如,像以下的兩個Python函數:

 

  1. def say_hello(person_name): 
  2.  
  3. print 'Hello, %s' % person_name 
  4.  
  5. def say_goodbye(person_name): 
  6.  
  7. print 'Goodbye, %s' % person_name 

我們可以把問候語提取出來變成一個參數:

 

  1. def greet(person_name, greeting): 
  2.  
  3. print '%s, %s' % (greeting, person_name) 

通過使用額外的URLconf參數,你可以把同樣的思想應用到Django的視圖中。

了解這個以后,你可以開始創作高抽象的視圖。 更具體地說,比如這個視圖顯示一系列的 Event 對象,那個視圖顯示一系列的 BlogEntry 對象,并意識到它們都是一個用來顯示一系列對象的視圖的特例,而對象的類型其實就是一個變量。

以這段代碼作為例子:

 

  1. # urls.py 
  2.  
  3. from django.conf.urls.defaults import * 
  4.  
  5. from mysite import views 
  6.  
  7. urlpatterns = patterns(''
  8.  
  9. (r'^events/$', views.event_list), 
  10.  
  11. (r'^blog/entries/$', views.entry_list), 
  12.  
  13.  
  14. # views.py 
  15.  
  16. from django.shortcuts import render_to_response 
  17.  
  18. from mysite.models import Event, BlogEntry 
  19.  
  20. def event_list(request): 
  21.  
  22. obj_list = Event.objects.all() 
  23.  
  24. return render_to_response('mysite/event_list.html', {'event_list': obj_list}) 
  25.  
  26. def entry_list(request): 
  27.  
  28. obj_list = BlogEntry.objects.all() 
  29.  
  30. return render_to_response('mysite/blogentry_list.html', {'entry_list': obj_list}) 

這兩個視圖做的事情實質上是一樣的: 顯示一系列的對象。 讓我們把它們顯示的對象的類型抽象出來:

 

  1. # urls.py 
  2.  
  3. from django.conf.urls.defaults import * 
  4.  
  5. from mysite import models, views 
  6.  
  7. urlpatterns = patterns(''
  8.  
  9. (r'^events/$', views.object_list, {'model': models.Event}), 
  10.  
  11. (r'^blog/entries/$', views.object_list, {'model': models.BlogEntry}), 
  12.  
  13.  
  14. # views.py 
  15.  
  16. from django.shortcuts import render_to_response 
  17.  
  18. def object_list(request, model): 
  19.  
  20. obj_list = model.objects.all() 
  21.  
  22. template_name = 'mysite/%s_list.html' % model.__name__.lower() 
  23.  
  24. return render_to_response(template_name, {'object_list': obj_list}) 

就這樣小小的改動,我們突然發現我們有了一個可復用的,模型無關的視圖! 從現在開始,當我們需要一個視圖來顯示一系列的對象時,我們可以簡簡單單的重用這一個 object_list 視圖,而無須另外寫視圖代碼了。 以下是我們做過的事情:

我們通過 model 參數直接傳遞了模型類。 額外URLconf參數的字典是可以傳遞任何類型的對象,而不僅僅只是字符串。

這一行: model.objects.all() 是 鴨子界定 (原文:

我們使用 model.__name__.lower() 來決定模板的名字。 每個Python的類都有一個 __name__ 屬性返回類名。 這特性在當我們直到運行時刻才知道對象類型的這種情況下很有用。 比如, BlogEntry 類的 __name__ 就是字符串 'BlogEntry' 。

這個例子與前面的例子稍有不同,我們傳遞了一個通用的變量名給模板。 當然我們可以輕易的把這個變量名改成 blogentry_list 或者 event_list ,不過我們打算把這當作練習留給讀者。

因為數據庫驅動的網站都有一些通用的模式,Django提供了一個通用視圖的集合,使用它可以節省你的時間。 我們將會在下一章講講Django的內置通用視圖。

提供視圖配置選項

如果你發布一個Django的應用,你的用戶可能會希望配置上能有些自由度。 這種情況下,為你認為用戶可能希望改變的配置選項添加一些鉤子到你的視圖中會是一個很好的主意。 你可以用額外URLconf參數實現。

一個應用中比較常見的可供配置代碼是模板名字:

 

  1. def my_view(request, template_name): 
  2.  
  3. var = do_something() 
  4.  
  5. return render_to_response(template_name, {'var'var}) 

了解捕捉值和額外參數之間的優先級 額外的選項

當沖突出現的時候,額外URLconf參數優先于捕捉值。 也就是說,如果URLconf捕捉到的一個命名組變量和一個額外URLconf參數包含的變量同名時,額外URLconf參數的值會被使用。

例如,下面這個URLconf:

 

  1. from django.conf.urls.defaults import * 
  2.  
  3. from mysite import views 
  4.  
  5. urlpatterns = patterns(''
  6.  
  7. (r'^mydata/(?P/d+)/$', views.my_view, {'id': 3}), 
  8.  

 

這里,正則表達式和額外字典都包含了一個 id 。硬編碼的(額外字典的) id 將優先使用。 就是說任何請求(比如, /mydata/2/ 或者 /mydata/432432/ )都會作 id 設置為 3 對待,不管URL里面能捕捉到什么樣的值。

聰明的讀者會發現在這種情況下,在正則表達式里面寫上捕捉是浪費時間的,因為 id 的值總是會被字典中的值覆蓋。 沒錯,我們說這個的目的只是為了讓你不要犯這樣的錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91中文字幕一区| 69av成年福利视频| 久久伊人91精品综合网站| 欧美噜噜久久久xxx| 久久亚洲国产精品成人av秋霞| 久久久精品2019中文字幕神马| 中文字幕一区电影| 国内精品久久久久久| 亚洲精品自产拍| 欧美裸体xxxx极品少妇| 91久久精品美女| 国产黑人绿帽在线第一区| 国产欧美va欧美va香蕉在| 国产精品一区久久| 国产主播欧美精品| 国产精品黄色av| 欧美香蕉大胸在线视频观看| www.亚洲一二| 国产精品久久久久久久久久99| 91久久久久久久久| 成人欧美在线观看| 欧美日韩福利电影| 久久这里只有精品99| 精品女厕一区二区三区| 国内精品久久久久| 国产精品爽爽爽爽爽爽在线观看| 成人国产精品av| 国产成人精品视频在线观看| 国产精品一区二区女厕厕| 欧美尺度大的性做爰视频| 久久韩剧网电视剧| 国产精品99久久99久久久二8| 国产精品欧美亚洲777777| 伊人久久综合97精品| 国产精品国模在线| 国产丝袜精品第一页| 久久久久久亚洲精品不卡| 国产一区二区三区日韩欧美| 国产综合香蕉五月婷在线| 精品人伦一区二区三区蜜桃网站| 精品国产鲁一鲁一区二区张丽| 亚洲美女在线视频| 日韩网站免费观看高清| 欧美中文字幕在线观看| 欧美激情中文字幕乱码免费| 97久久久久久| 日韩美女视频中文字幕| 日本欧美一级片| 欧美夜福利tv在线| 亚洲国产精品va在线看黑人| 久久精品国产欧美亚洲人人爽| 国产精品视频最多的网站| 91欧美日韩一区| 国产精品久久久久久久久久免费| 国产成人精品在线视频| 国内外成人免费激情在线视频| 欧美激情视频一区二区三区不卡| 亚洲黄色免费三级| 国产精品黄色影片导航在线观看| 国产精品亚洲精品| 成人在线免费观看视视频| 91在线视频导航| 亚洲欧美国产精品| 狠狠躁夜夜躁人人爽超碰91| 亚洲天天在线日亚洲洲精| 中文字幕一区二区精品| 日本精品在线视频| 欧美亚洲另类激情另类| 国产精品一区二区性色av| 亚洲欧美国产一区二区三区| 久久久精品中文字幕| 亚洲精品720p| 一本大道亚洲视频| 亚洲精品视频中文字幕| 国产精品三级久久久久久电影| 精品国产一区二区三区久久狼5月| 在线不卡国产精品| 久久精品青青大伊人av| 久久久久久久久爱| 91精品视频免费看| 欧美第一黄色网| 欧美日韩国内自拍| 欧美小视频在线观看| 亚洲色图日韩av| 亚洲美女自拍视频| 91在线高清免费观看| 57pao国产精品一区| 欧美老少做受xxxx高潮| 92版电视剧仙鹤神针在线观看| 欧美电影在线观看网站| 91精品久久久久久久久久| 国内精品久久久久伊人av| 欧美成人精品h版在线观看| www欧美日韩| 亚洲视频777| xx视频.9999.com| 美女视频黄免费的亚洲男人天堂| 91av网站在线播放| 久久久女人电视剧免费播放下载| 色www亚洲国产张柏芝| 精品国产欧美一区二区三区成人| 久久精品电影网站| 国产精品免费久久久久影院| 97视频免费在线看| 国产精品欧美一区二区| 亚洲国内高清视频| 午夜精品一区二区三区在线播放| 乱亲女秽乱长久久久| 国产精品一区二区三区免费视频| 久久国产精品99国产精| 欧美日韩亚洲一区二区三区| 欧美精品www在线观看| 91高清视频在线免费观看| 久久人人爽人人爽人人片av高清| 2019中文字幕在线免费观看| 亚洲国产天堂久久国产91| 国产精品免费小视频| 国产亚洲精品久久久久久| 日韩免费av在线| 在线亚洲国产精品网| 91精品在线观| 欧美成人午夜免费视在线看片| 亚洲综合日韩在线| 精品电影在线观看| 国产精品偷伦免费视频观看的| 大量国产精品视频| 91po在线观看91精品国产性色| 欧美成人午夜激情在线| 国产精品入口日韩视频大尺度| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品亚洲精品| 国产精品1区2区在线观看| 久久久久久com| 在线视频一区二区| 亚洲激情国产精品| 欧美激情欧美激情在线五月| 国产精品人人做人人爽| 国产精品色午夜在线观看| 海角国产乱辈乱精品视频| 亚洲国产日韩欧美在线99| 91精品久久久久久久久| 日韩精品免费观看| 国产偷国产偷亚洲清高网站| 欧美国产第二页| 精品视频在线播放色网色视频| 国产一区二区三区中文| 国产91精品在线播放| 成人久久久久久久| 国产精品激情av在线播放| 国产精品麻豆va在线播放| 日韩av黄色在线观看| 在线观看中文字幕亚洲| 日产日韩在线亚洲欧美| 精品久久久久久久久久| 亚洲sss综合天堂久久| 高跟丝袜欧美一区| 色综合久久久久久中文网| 久久九九有精品国产23| 欧美巨大黑人极品精男| 欧美高清视频在线观看| 乱亲女秽乱长久久久| 亚洲成人亚洲激情| 国产一区二区精品丝袜| 亚洲风情亚aⅴ在线发布|