91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django框架視圖層URL映射與反向解析實例分析

發布時間:2020-10-20 22:36:34 來源:腳本之家 閱讀:139 作者:我是豬行不 欄目:開發技術

本文實例講述了Django框架視圖層URL映射與反向解析。分享給大家供大家參考,具體如下:

Django視圖層主要工作就是銜接HTTP請求、python程序、HTML模板。

URL分發(URL dispatcher)映射配置可以被看作Django項目的入口配置(項目下的urls.py以及應用的下的urls.py,include將兩者聯系起來在項目下的urls.py),通過URLdispatcher可以指定用戶的每一個訪問的后臺的python處理函數是什么。

1.普通url映射

每一個Django都有一個urls.py來維護URL dispatcher,如下所示:

from django.conf.urls import url
from . import views #導入視圖處理函數
urlpatterns = [
  url(r'^year/2015/$', views.moments_2015),
  url(r'^year/([0-9]{4}$)', views.years_moments),
  url(r'^month/([0-9]{4})/([0-9]{2}$)', views.month_moments),
  url(r'month/([0-9]{4})/([0-9]{2})/([0-9]+)$', views.test),
]

該文件通過維護urlpatterns列表的元素完成URL映射,每個元素都是django.conf.urls.url的一個實例,url的第一個參數是HTPP路徑,第二個是相應的python函數名。

URL路徑用正則表達式表達,'^'起始符,'$'結束符,第一個路徑是嚴格路徑,只匹配'year/2015',調用是的views中moment_2015(request)函數,request是用戶請求對象!

第二個路徑匹配的事任何'year/xxxx'路徑,其中xxxx代表是四個數字,調用views的year_moment(request,xxxx),并且會把四個數字當成變量傳給該函數

第三個第四個與第二個類似,只不過后續添加了更多路徑變量調用函數分別為month_moments(request, xxxx, yy)和test(request,xxxx, yy, zz)

2.命名URL參數映射

命名URL參數映射使得開發者可以定義這些被傳遞參數的參數名稱,方式為"?P<name>pattern",如下所示:

from django.conf.urls import url
from . import views
urlpatterns = [
  url(r'^year/2015/$', views.moments_2015),
  url(r'^year/?P<year>([0-9]{4}$)', views.years_moments),
  url(r'^month/?P<year>([0-9]{4})/?P<month>([0-9]{2}$)', views.month_moments),
]

當多個URL映射定義可以匹配同一個URL訪問,django會選取列表的第一個元素!!!!!!!!!!

后兩個url使用命名參數進行定義,調用函數如下:

year_moments(request,year=xxxx)和month_moments(request,year=xxxx,month=xx)!

3.分布式URL映射

在django項目中,可能包含多個應用,每個app都有自己urls.py,如果將所有的url映射都放在一個urls.py文件不利于維護。Django通過include()函數提供了分布式URL映射功能。

在項目根映射文件urls.py引用其他應用的映射文件:

from django.conf.urls import url, include
urlpatterns = [
  url(r'^moments/', include('djangosite.app.urls')),
  url(r'^admin/', include('djangosite.admin.urls')),
]

以moment/開頭的URL被轉接到djangosite.app.urls.py文件

以admin/開頭的URL被轉接到djangosite.admin.urls.py文件

其中子映射文件app/urls.py:

from django.conf.urls import url, include
from . import views
urlpatterns = [
  url(r'^year/?P<year>([0-9]{4})/$', views.year_moments),
  url(r'^admin/', include('djangosite.admin.urls')),
]

解析URL:

第一個對http://xxxxxxxxx/moments/year/2013的訪問會定位到app/views.py的year_moments函數

第二個元素對http://xxxxxx/moments/admin的訪問會轉接到djangosite.admin.urls.py文件進行解析

4.反向解析

django的反向解析共那個在模板文件和python視圖函數 :

在模板文件中用{%url%}標簽調用反向解析;

在python視圖函數中用django.urls.reverse()函數。

from django.conf.urls import url, include
urlpatterns = [
  url(r'^year/2015/$', views.year_moments, name="moments_2015"),
]

定義一個URL映射,通過name參數將該映射命名為moments_2015.在需要獲取該URL的模板文件中{%url%}標簽來進行聲明:

<a href="{% url 'moments_2015'%}" rel="external nofollow" >
查看2015消息
</a>

上面用'moments_2015'映射名作為反向解析的參數,解析結果為:

<a href="/year/2015/" rel="external nofollow" rel="external nofollow" >
查看2015消息
</a>

在視圖函數中調用方式是reverse函數。如下所示:

#views.py
from django.urls import reverse
from django.http import HTTPResponseRedirect
def redirect_to_year_2015(request):
  return HTTPResponseRedirect(reverse('moments_2015'))

5.反向解析帶參數

模板文件如下所示:

from django.conf.urls import url, include
urlpatterns = [
  url(r'^year/?P<year>([0-9]{4})/$', views.year_moments, name="moments"),
]

模板文件通過{%url%}標簽調用反向解析:

<a href="{% url 'moments', 2015%}" rel="external nofollow" >
查看2015消息
</a>

上面用'moments_2015'映射名作為反向解析的參數,解析結果為:

<a href="/year/2015/" rel="external nofollow" rel="external nofollow" >
查看2015消息
</a>

python視圖函數調用reverse進行反向解析:

#views.py
from django.urls import reverse
from django.http import HTTPResponseRedirect
def redirect_to_year_2015(request):
  return HTTPResponseRedirect(reverse('moments', args=(2014,)))

args參數可以攜帶參數反向解析!

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

图木舒克市| 丁青县| 逊克县| 湾仔区| 江川县| 巴青县| 海安县| 唐山市| 天峨县| 法库县| 西华县| 道孚县| 梅河口市| 台中县| 高要市| 临夏市| 祁门县| 郴州市| 定西市| 扎赉特旗| 祁东县| 安龙县| 博野县| 大同县| 保德县| 台前县| 那曲县| 南昌县| 伊金霍洛旗| 沁水县| 皋兰县| 夏河县| 忻城县| 新巴尔虎左旗| 利辛县| 武山县| 邻水| 嵊泗县| 班玛县| 新巴尔虎右旗| 卢湾区|