Django學習筆記之——Urls


UrlConf模塊感受就像是「路由」,它分析請求的路徑,並請求派送給匹配的view去處理

打開mysite.urls.py文件,以下:
_____________________________________________________
from django.conf.urls import patterns, include, url

from views import home
import blog.urls

urlpatterns = patterns('',
    url(r'^$', home),
    url(r'^blog/', include(blog.urls))
)
-----------------------------------------------------
這裏url()函數中的第一個參數則是路徑的匹配正則式,第二個參數是對應的view。
注意:home與blog.urls必須是提早import了的。否則解析器不知道home與blog.urls
是什麼,就會報錯。

因爲Python沒有強制類型,並且在運行時能夠識別變量的類型,因此url()與include()
設計得很靈活。它們還能夠支持名稱:
_____________________________________________________
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^$', 'mysite.views.home'),
    url(r'^blog/', include('mysite.blog.urls'))
)
-----------------------------------------------------
這裏用的是'mysite.views.home',注意是加了引號的,是字符串。
它的實現原理就是暫時記錄名稱,等manage.py運行起來以後再根據名稱去動態import
對應的對象。
注意:名稱必須是相對於manage.py的。'views.home', 'home'都是不正確的。

匹配參數
~~~~~~~~
在url()中還能夠從路徑上捕獲組,並以參數的形式傳給view函數。

urls.py :
___________________________________________________________________
urlpatterns = patterns('',
    url(r'^date/(\d{4})-(\d{1,2})-(\d{1,2})', 'mysite.views.date'),
)
-------------------------------------------------------------------
用正則式的組捕獲功能,將年月日分別捕獲出來。

views.py :
___________________________
def date(request, *args):
    print(args)
    return HttpResponse()
---------------------------
讓view函數date接受一個可變參數args,而後將其打印出來。

請求127.0.0.1:8000/date/2015-12-24
運行時打印的結果:
(u'2014', u'12', u'24')

爲了可讀性更好,咱們能夠將正則式這樣寫:
_______________________________________________________________________
    url(r'^date/(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})',
        'mysite.views.date'),
-----------------------------------------------------------------------
爲每一個組用(?P<name>xxxx)的方式命名。

而view這樣改一下:
_____________________________________
def date(request, year, month, day):
    print('year:' + year)
    print('month:' + month)
    print('day:' + day)
    return HttpResponse()
-------------------------------------
添加yeas, month, day三個參數。而這三個參數與正則式的組名一一對應(在順序上
無需對應)。

再次訪問:127.0.0.1:8000/date/2015-12-24
輸出結果:
year:2014
month:12
day:24

不只如此,url()函數還有第三個參數,容許咱們爲view函數添加其它附加參數。

在urls.py添加url:
___________________________________________________________________________
urlpatterns = patterns('',
    url(r'^extra$', 'mysite.views.extra_param', {'abc':120, 'xyz':'Hello'})
    #                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
)
---------------------------------------------------------------------------
在views.py中添加extra_param函數:
_____________________________________
def extra_param(request, xyz, abc):
    print(xyz)
    print(abc)
    return HttpResponse()
-------------------------------------
訪問 http://127.0.0.1:8000/extra
服務控制端打印結果:
Hello
120

綜上,咱們能夠很是靈活地使用url()進行訪問地址匹配。

==========================================================================
關於urls.py中引用到的patterns(), url(), include()三個函數在:
django/conf/urls/__init__.py中定義。

include(arg, namespace=None, app_name=None)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include(arg)函數檢查${arg}模塊中是否包含urlpatterns屬性。
並返回: (urlconf_module, app_name, namespace)

url(regex, view, kwargs=None, name=None, prefix='')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
返回一個RegexURLPattern對象。

patterns(prefix, *args)
~~~~~~~~~~~~~~~~~~~~~~~
返回一個RegexURLPattern對象列表,並使列表中的每一個成員的prefix都與函數的
prefix一致。

django

相關文章
相關標籤/搜索