路由的基本使用

  一.路由的基本使用:  

    url是个函数,有四个参数,第一个参数要传正则表达式,第二个参数传函数内存地址,第三个参数传默认参数,第四个是路由的别名

    url(r'^liuqingzheng/article/aa.html$',views.test,

  二.路由的无名分组

    url(r'^test2/(\d+)/(w+)$',views.test2),

    无名分组分出几个值,视图函数就要接受几个值(位置参数形式传过来的)

  三.路由的有名分组

    url(r'^test3/(?P<id>\d+)/(?P<name>\w+)$',views.test3),

    有名分组分出几个值,视图函数就要接收几个值(按关键字传入,位置可以打乱)

  四.有名和无名不能混着用

  五.在settings中配置(以后项目,一般不用动)

    # 默认是true,浏览器浏览的时候,默认加上斜杠

    # 如果是False,浏览器默认不会加/

    # APPEND_SLASH = False

  六.路由分发

    1.导入include

        from django.conf.urls import include

    2.在主路由中:

        url(r'^app01/',include('app01.urls')),

        url(r'^app02/',include('app02.urls')),

    3.在不同app中新建一个urls

        from app01 import views

        urlpatterns = [

          url(r'^test/',views.test),

        ]

    4. 如果浏览器输入app01/test/,就会响应到app01下views中的test去执行

  七. 反向解析

      干什么用?

        在视图函数中重定向的地址原来是写死的,如果url地址变更,我需要所有的url都修改,很麻烦,所有可以通过反向解析,获得url的地址

      如何使用:

        路由层:

          url(r'^test_2/$',views.test2,name='test2'),

        视图层:

          from django.shortcuts.import reverse

          url = reverse('url地址的别名')

          # 如果做了分组

          url = reverse('url地址的别名',args=[],kwargs={})

        模板层:

          {% url 'url地址的别名' %}

          # 如果做了分组

          {% url 'url地址的别名' 参数1 参数2 %}

  八. 名称空间

    路由分发时,可以指定名称空间:

      url(r'^app01/',include('app01.urls',namespace='app01')),

      url(r'^app02/',include('app02.urls',namespace='app02')),

    在视图中反向解析:

      url=reverse('app01:test')

    在模板中反向解析:

      {% url 'app01:url地址的别名' %}

    个人不建议这么使用:

      在不同app的urls中起别名的时候,添加:app名_别名

  九. django 2.0的path, re_path

    1.几的url就是2.几的re_path

    2.0的path  第一个参数不再是正则表达式

    5个转换器: int,str,slug,path,uuid

  十. 自定义转换器:

    1.写一个类:

      class MyCon:

        regex = '[0-9]{4}'

        def to_python(self, value):

          return int(value)

        def to_url(self,value):

          return '%04d' % value

    2. 在urls中:

      from django.urls import register_converter

      register_converter(类名,'别名')

      path('test/<别名:year>',views.test,name='year')

posted @ 2019-01-08 20:05  小菜鸟张阳阳  阅读(219)  评论(0编辑  收藏  举报