激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django中傳遞參數到URLconf的視圖函數中的方法

Django中傳遞參數到URLconf的視圖函數中的方法

2020-07-24 11:32腳本之家 Python

這篇文章主要介紹了Django中傳遞參數到URLconf的視圖函數中的方法,Django是最具人氣的Python開發框架,需要的朋友可以參考下

有時你會發現你寫的視圖函數是十分類似的,只有一點點的不同。 比如說,你有兩個視圖,它們的內容是一致的,除了它們所用的模板不太一樣:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# urls.py
 
from django.conf.urls.defaults import *
from mysite import views
 
urlpatterns = patterns('',
  (r'^foo/$', views.foo_view),
  (r'^bar/$', views.bar_view),
)
 
# views.py
 
from django.shortcuts import render_to_response
from mysite.models import MyModel
 
def foo_view(request):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response('template1.html', {'m_list': m_list})
 
def bar_view(request):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response('template2.html', {'m_list': m_list})

我們在這代碼里面做了重復的工作,不夠簡練。 起初你可能會想,通過對兩個URL都使用同樣的視圖,在URL中使用括號捕捉請求,然后在視圖中檢查并決定使用哪個模板來去除代碼的冗余,就像這樣:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# urls.py
 
from django.conf.urls.defaults import *
from mysite import views
 
urlpatterns = patterns('',
  (r'^(foo)/$', views.foobar_view),
  (r'^(bar)/$', views.foobar_view),
)
 
# views.py
 
from django.shortcuts import render_to_response
from mysite.models import MyModel
 
def foobar_view(request, url):
  m_list = MyModel.objects.filter(is_new=True)
  if url == 'foo':
    template_name = 'template1.html'
  elif url == 'bar':
    template_name = 'template2.html'
  return render_to_response(template_name, {'m_list': m_list})

這種解決方案的問題還是老缺點,就是把你的URL耦合進你的代碼里面了。 如果你打算把 /foo/ 改成 /fooey/ 的話,那么你就得記住要去改變視圖里面的代碼。

對一個可選URL配置參數的優雅解決方法: URLconf里面的每一個模式都可以包含第三個數據: 一個關鍵字參數的字典:

有了這個概念以后,我們就可以把我們現在的例子改寫成這樣:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# urls.py
 
from django.conf.urls.defaults import *
from mysite import views
 
urlpatterns = patterns('',
  (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
  (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
)
 
# views.py
 
from django.shortcuts import render_to_response
from mysite.models import MyModel
 
def foobar_view(request, template_name):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response(template_name, {'m_list': m_list})

如你所見,這個例子中,URLconf指定了 template_name 。 而視圖函數會把它當成另一個參數。

這種使用額外的URLconf參數的技術以最小的代價給你提供了向視圖函數傳遞額外信息的一個好方法。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人精品一区二区 | 中文字幕免费看 | 国产精品二区高清在线 | 依人在线视频 | 欧美日韩免费看 | 操操电影| 国产精品aⅴ | 97风流梦电影 | 久久国产午夜 | 亚洲看片网| 蜜桃视频在线入口www | 日本精品中文字幕 | 中文字幕亚洲一区二区三区 | 国产精品视频免费在线观看 | 国产精品免费麻豆入口 | av免费提供 | 色黄视频网站 | 777zyz色资源站在线观看 | 国产噜噜噜噜噜久久久久久久久 | 免费a级毛片永久免费 | 国产九九九九 | 91一区二区三区久久久久国产乱 | 国产黄色一区二区 | 国产99久久久久久免费看农村 | 欧美性生活久久久 | 久久电影一区二区 | 国产99视频精品免视看9 | 91看片在线观看视频 | 一区二区国产在线 | 国产小视频在线观看 | 少妇的肉体的满足毛片 | 欧美毛片 | hd性videos意大利复古 | av在线影片 | 日本不卡一区二区三区在线观看 | 超碰九色| 国产精品久久久久久久四虎电影 | 99在线热视频 | 欧美a视频 | 黄污污网站| 作爱在线观看 |