django中url参数详解(路由系统)

路由系统

1、单一路由对应

1
url(r '^index$' , views.index),

2、基于正则的路由

1
2
url(r '^index/(\d*)' , views.index),
url(r '^manage/(?P<name>\w*)/(?P<id>\d*)' , views.manage),

3、添加额外的参数

1
url(r '^manage/(?P<name>\w*)' , views.manage,{ 'id' : 333 }),

4、为路由映射设置名称

1
2
url(r '^home' , views.home, name = 'h1' ),
url(r '^index/(\d*)' , views.index, name = 'h2' ),

设置名称之后,可以在不同的地方调用,如:

  • 模板中使用生成URL     {% url 'h2' 2012 %}
  • 函数中使用生成URL     reverse('h2', args=(2012,))      路径:django.urls.reverse
  • Model中使用获取URL  自定义get_absolute_url() 方法
class NewType(models.Model):
    caption = models.CharField(max_length=16)


    def get_absolute_url(self):
        """
        为每个对象生成一个URL
        应用:在对象列表中生成查看详细的URL,使用此方法即可!!!
        :return:
        """
        # return '/%s/%s' % (self._meta.db_table, self.id)
        #
        from django.urls import reverse
        return reverse('NewType.Detail', kwargs={'nid': self.id})

 

获取请求匹配成功的URL信息:request.resolver_match

5、根据app对路由规则进行分类

1
url(r '^web/' ,include( 'web.urls' )),

6、命名空间

a. project.urls.py

1
2
3
4
5
6
from  django.conf.urls  import  url,include
 
urlpatterns  =  [
     url(r '^a/' , include( 'app01.urls' , namespace = 'author-polls' )),
     url(r '^b/' , include( 'app01.urls' , namespace = 'publisher-polls' )),
]

b. app01.urls.py

1
2
3
4
5
6
7
from  django.conf.urls  import  url
from  app01  import  views
 
app_name  =  'app01'
urlpatterns  =  [
     url(r '^(?P<pk>\d+)/$' , views.detail, name = 'detail' )
]

c. app01.views.py

1
2
3
def  detail(request, pk):
     print (request.resolver_match)
     return  HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  • v = reverse('app01:detail', kwargs={'pk':11})
  • {% url 'app01:detail' pk=12 pp=99 %}

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

转载于:https://www.cnblogs.com/qkqBeer/articles/9405794.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值