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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

url函数详解

發(fā)布時(shí)間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 url函数详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

url函數(shù)詳解

?

url()函數(shù)在urls.py文件中可以說(shuō)是最重要的函數(shù),屬于核心。主要功能就是利用正則表達(dá)式匹配對(duì)應(yīng)的url并且指明處理函數(shù)。下面詳細(xì)講解這部分的應(yīng)用。我們從參數(shù)著手,先講解基礎(chǔ)用法,然后在用示例展示一些高級(jí)用法。

?

url有四個(gè)參數(shù),分別是兩個(gè)必選參數(shù):regex、view和兩個(gè)可選參數(shù):kwargs、name。下面分別介紹。

?

regex

?

regex代表一個(gè)正則表達(dá)式,凡是與regex匹配的URL請(qǐng)求都會(huì)執(zhí)行到url()函數(shù)中對(duì)應(yīng)的第二個(gè)參數(shù)view代表的視圖函數(shù)中。需要注意的是:正則表達(dá)式不會(huì)匹配URL中的域名和查詢參數(shù),如:http://192.168.1.10:8000/article/?page=1,Django只找article/。正則表達(dá)式在URLconf模塊加載時(shí)就編譯好了,所以在匹配的時(shí)候速度是很快的。

?

正則表達(dá)式中遇到的一些情況:

1.??????正則表達(dá)式字符串的開(kāi)頭字母“r”。它告訴Python這是個(gè)原始字符串,不需要處理里面的反斜杠(轉(zhuǎn)義字符)。在普通Python字符串中,反斜杠用于特殊字符的轉(zhuǎn)義。當(dāng)你用r把它標(biāo)示為一個(gè)原始字符串后,Python不再視其中的反斜杠為轉(zhuǎn)義字符。

2.??????url中常用的正則表達(dá)式符號(hào):除了^ 和 $ 表示以開(kāi)頭和結(jié)尾外還有一些正則表達(dá)式符號(hào)可能會(huì)用到:

?

?

view

?

Django匹配正則表達(dá)式成功后,就會(huì)找到相應(yīng)的視圖函數(shù)進(jìn)行處理。這個(gè)函數(shù)通常寫(xiě)在views中,關(guān)于views的詳細(xì)內(nèi)容我們后面會(huì)views部分還會(huì)講解。

?

?

kwargs

?

kwargs就是一個(gè)字典類型的參數(shù),它的使用方式如:

?

url(r'^archive /(d{4})/$', archive, {'dict':True}),

?

這里的kwargs 就是{'summary': True},可以直接向視圖函數(shù)對(duì)應(yīng)的傳參,相當(dāng)于字典方式傳參。另外還有一種方式為位置傳參,即(d{4})的部分。注意第一個(gè)括號(hào)中的內(nèi)容會(huì)傳給視圖函數(shù)的第二個(gè)參數(shù)(第一個(gè)是request),第二個(gè)括號(hào)部分傳給第三個(gè),以此類推。

?

視圖函數(shù)中就是這樣使用接收相應(yīng)參數(shù):

?

def archive(request, archive_id, dict):

?

?

name

?

name是為了提高模版的靈活性。Djangotemplate中經(jīng)常會(huì)有一些url的標(biāo)識(shí),如: <a href="/login"class="head">請(qǐng)登錄<span>|</span></a>?這種硬編碼的方式,模版難以維護(hù)。內(nèi)建標(biāo)簽url,{% url path.to.some_view%}可以返回視圖函數(shù)對(duì)應(yīng)的URL(相對(duì)域名的絕對(duì)路徑),比如url(r^/account/$’, views.index, name=index),使用{% url view.index%}將返回/accout/,這樣做可以方便修改。

?

Include的使用

?

Include函數(shù)對(duì)應(yīng)返回值可以用作url函數(shù)的第二個(gè)參數(shù),作為url的引用。例如:

# urls.py

?

from django.conf.urls? import *

?

urlpatterns = patterns('',

???(r'^blog/', include('myapp.urls')),

)

表示url blog/ 對(duì)應(yīng)的轉(zhuǎn)入inner函數(shù)繼續(xù)進(jìn)行url處理,通常就是我們所說(shuō)的app內(nèi)的url文件

?

#app內(nèi)urls.py

?

from django.conf.urls? import *

?

urlpatterns = patterns('',

???(r'^archive/$', 'mysite.views.archive'),?對(duì)應(yīng)的url實(shí)際是? blog/archive/

???(r'^about/$', 'mysite.views.about'),

???(r'^rss/$', 'mysite.views.rss'),

)

如果在上一層url加入第三個(gè)參數(shù)字典,則表示在其下一層所有的url中都加入此字典,如下兩個(gè)代碼等價(jià):

?

第一個(gè):

?

# urls.py

?

from django.conf.urls.defaults import *

?

urlpatterns = patterns('',

???(r'^blog/', include('inner'), {'blogid': 3}),

)

?

# inner.py

?

from django.conf.urls.defaults import *

?

urlpatterns = patterns('',

???(r'^archive/$', 'mysite.views.archive'),

???(r'^about/$', 'mysite.views.about'),

???(r'^rss/$', 'mysite.views.rss'),

)

第二個(gè)

?

# urls.py

?

from django.conf.urls.defaults import *

?

urlpatterns = patterns('',

???(r'^blog/', include('inner')),

)

?

# inner.py

?

from django.conf.urls.defaults import *

?

urlpatterns = patterns('',

???(r'^archive/$', 'mysite.views.archive', {'blogid': 3}),

???(r'^about/$', 'mysite.views.about', {'blogid': 3}),

???(r'^rss/$', 'mysite.views.rss', {'blogid': 3}),

)

?

如果在上一層想表達(dá)什么都不匹配直接進(jìn)入下一層匹配的時(shí)候用如下代碼:

?(r'^', include('myapp.urls')),? 即相當(dāng)于直接匹配app中url對(duì)應(yīng)的正則表達(dá)式匹配

)

?

?

調(diào)試模式

?

在url中經(jīng)常用到一些調(diào)試模式,決定有些url是否執(zhí)行:

?

if settings.DEBUG:

???urlpatterns += patterns('',

???????(r'^debuginfo/$', views.debug),

)

?

重用命名組

?

上面我們講到向視圖函數(shù)中傳參,位置傳參不需要指定視圖函數(shù)中參數(shù)的名稱,但是通過(guò)下面的用法P?<參數(shù)名> 的方式可以強(qiáng)行指定視圖函數(shù)中必須對(duì)應(yīng)那個(gè)名稱的參數(shù)

?

urlpatterns = patterns('',

???(r'^articles/(?P<year>\d{4})/$', views.year_archive),

???(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$',views.month_archive),

)

?

?

不同的url對(duì)應(yīng)相同的處理函數(shù)

?

實(shí)際這種情況也經(jīng)常發(fā)生,我們可以通過(guò)url的第三個(gè)參數(shù)傳入使用模板的名字,這樣不同的url對(duì)應(yīng)相同的函數(shù),使用不同模板。

?

urlpatterns = patterns('',

???(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),

???(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),

)

?

總結(jié)

以上是生活随笔為你收集整理的url函数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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