路由层

路由关系:

无名分组:
        url(r'^admin/', admin.site.urls),
        # 第一个参数,可以写一个正则表达式
        # 从上往下匹配,一旦匹配成功,就不往下走了
        # 如果分几个个组,相应的视图函数,就应该接收几个
        # 在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败
        # 伪静态,方便搜索引擎收录
有名分组:views视图可以不按照位置接收值
    1 url(r'^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.test)
    2 def test(request,month,year):
        print(year)
        print(month)
        return HttpResponse('ok')
        #名字必须一致,否则报错,位置可以颠倒,如果分了两个组,必须用两个参数接
    3 有名分组和无名分组不要混用
    4 有名分组可以用**kwargs接收,无名分组可以用*args接收
    5 分组捕获的参数,都是str类型
    6 可以设置默认值
路由分发:
    1 先导入from django.conf.urls import include  (总urls里)
    2 url(r'^app01/', include('app01.urls')),有两种方式:。。。。    请求url多了一层
    3 在相应的app里创建urls  py文件,建议,不要改名字
    4 urlpatterns 不能变名字 ,后面的写法就一样了 url(r'^test',views.test3 ),
    5 重复上面步骤,分发多个
2.几和1.几的区别
    1 2.几的re_path 就是我原来的url
    2 2.几多了一个path,不支持正则
反向解析  url变动态,写活
    1 路由中,命一个名,url(r'^index/', views.index,name='n1'),
    2 在视图函数里:
        from django.shortcuts import reverse
        #这样就能拿到我反向解析出来的url
        url=reverse('n1')
    3 在模板里用:
        {% url 'n1'%}
    4 带位置参数反向解析  url(r'^index/([0-9]{4})/([0-9]{2})', views.index,name='n1'),
        视图:url=reverse('n1',args=(2012,12,))
        
        模板:{% url 'n1' 2012 12 %}
    5 带关键字参数反向解析  url(r'^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.index,name='n1'),
        视图:url=reverse('n1',args=(2012,12,)   ---可以
              url=reverse('n1',kwargs={'year':2014,'month':12})-----也可以
              
        模板:
            {% url 'n1' 2012 12 %}----可以
            {% url 'n1' month=12 year=2012 %}----可以
        注意:按位置传,顺序是固定的
                
    作用:修改路由中url的时候,其它地方不需要改动
名称空间:(知道它,但是建议不同app的url里name不能重名,app的名字_name)
    1   url(r'^app01/', include('app01.urls',namespace='app01')),
            urlpatterns = [
                url(r'^test',views.test3 ,name='test'),

            ]
        url(r'^app02/', include('app02.urls',namespace='app02')),            
            urlpatterns = [
                    url(r'^test02',views.test3 ,name='test'),

                ]
    2 在视图函数里:
        url=reverse('app02:test')
        print(url)
    3 在模板里:
        <a href="{% url 'app02:test' %}">点我跳到首页</a>
django 2.0 path

    1 from django.urls import path
    2 不支持正则,精准匹配
    3 有5个转换器(int,str,slug,path,uuid) 函数必须用相同的参数名接收
    4 自定义转换器:
        1 写一个类:
        class Test:
            regex = '[0-9]{4}'
            def to_python(self, value):
                # 写一堆处理
                value=value+'aaa'
                return value
            def to_url(self, value):
                return '%04d' % value
        2 from django.urls import register_converter
        3 register_converter(Test,'ttt'4 path('index/<ttt:year>', views.index,name='index'),
原文地址:https://www.cnblogs.com/xujinjin18/p/9594400.html