Django URL分发

⼀个项⽬可以有很多 urls.py 分布在多个应⽤(app)中。Django 需要⼀个 url.py 作为⼊⼝。

这个特殊的 urls.py 叫做根路由配置(root URLconf)。它被定义在 settings.py 中:

ROOT_URLCONF = 'XXX.urls'

当 Django 接受⼀个请求(request), 它就会在项⽬的 URLconf 中寻找匹配项。他从 urlpatterns 变量的第⼀条开始,然后在每个 url 中去匹配请求的 URL。

如果 Django 找到了⼀个匹配路径,他会把请求(request)发送给 url 的第⼆个参数视图函数(view function)。所以说 urlpatterns 中的顺序非常重要,因为一旦匹配到就会停止搜索,如果Django在URLconf 中没有找到匹配项,他会通过 Page Not Found 的错误处理代码抛出一个404异常。

def url(regex, view, kwargs=None, name=None):
    # ...
  • regex: 匹配URL patterns的正则表达式。( 注意:正则表达式会忽略掉 GET 或者  POST 后⾯的参数。在⼀个    http://127.0.0.1:8000/boards/?page=2 的请求中,只有 /boards/ 会被处理。)
  • view: 视图函数被⽤来处理⽤户请求,同时它还可以是 django.conf.urls.include 函数的返回值,它将引⽤⼀个外部的urls.py ⽂件,例如,你可以使⽤它来定义⼀组特定于应⽤的 URLs,使⽤前缀将其包含在根 URLconf 中。
  • kwargs: 传递给⽬标视图函数的任意关键字参数,它通常⽤于在可重⽤ 视图上进⾏⼀些简单的定制,我们不是经常使⽤它。
  • name: 该 URL 的唯⼀标识符。这是⼀个⾮常重要的特征。要始终记 得为你的 URLs 命名。所以,很重要的⼀点是:不要在    views(视图) 或者 templates(模板) 中硬编码 URL,⽽是通过它的名字去引⽤URL。

高级URLs路由

更⾼级的URL路由使⽤⽅法是通过正则表达式来匹配某些类型的数据并创建动态 URL

比如这个例子中的url:

url(r'^boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),

正则表达式中的 \d+ 会匹配⼀个任意⼤⼩的整数值,这个正则表达式 (? P<pk>\d+) 这是告诉 Django 将捕获到的值放入名

为 pk 的关键字参数中。这时候他的视图函数应该是这样的:

def new_topic(request, pk):
    # do something...

如果想在视图函数中使用使用任意名字的参数,那么可以这么定义:

url(r'^boards/(\d+)/new/$', views.new_topic, name='new_topic'),

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值