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

相关文章
相关标签/搜索