路由层--简单配置,无名分组,有名分组,反向解析,路由分发,名称空间,伪静态

1. 简单配置

url(r'^admin/', admin.site.urls),

  • 第一个参数是正则表达式(如果要精准匹配:'^publish/$')

  • 第二个参数是视图函数(不要加括号)

分组:将url的正则部分分个组,分组里的数据会传给视图函数

2. 无名分组

  • 按位置传参

  • 分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参

    url(r'^publish/([0-9]{4})/([0-9]{2})$', views.publish),
    def publish(request, year, month):    视图函数可以这样接收
    def publish(request,*args):  或者这样
    

3. 有名分组

  • 按关键字传参

  • 有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关

    url(r'^publish/(?P[0-9]{4})/(?P[0-9]{2})/$', views.publish),
    def publish(request, mounth,year):
    

4.反向解析

场景: 当改了url部分的正则表达式后 , 模板里面与视图函数里面使用到的url都需要更改

需求: 改了url的正则表达式, 模板与视图函数会自动跟着变

  • 先给url命一个名: 在url函数的参数里加上参数name=' '

    1. 无参数:url(r'^publishadd133/$', views.publishadd,name='ddd'),
    2. 无名分组:url(r'^publishadd/([0-9]{4})/([0-9]{2})/$', views.publishadd,name='ddd'),
    3. 有名分组:url(r'^publishadd/(?P[0-9]{4})/(?P[0-9]{2})/$', views.publishadd,name='ddd'),
    
    
  • 在模板层使用url:

    1 无参数:{% url 'ddd' %}
    2 无名分组的:{% url 'ddd' 2018 12 %}
    3 有名分组:{% url 'ddd' 2018 12 %}  还可以 {% url 'ddd' year=2018 mounth=12 %}
    
  • 在视图层使用url:

    导模块:
    from django.shortcuts import reverse
    在视图函数里:
    1 无参数:url=reverse('ddd')
    2 无名分组:url=reverse('ddd',args=(2018,12,))
    3 有名分组:url=reverse('ddd',args=(2018,12,)) 
      还可以 url=reverse('ddd',kwargs={'year':2018,'mounth':12})
    

5. 路由分发

一个项目下有两个app, 分别为app01blog

app01里的url都为app01/.....

blog里的url都为blog/....

需求 : 请求先经过总路由匹配到对应的app下 , 再由不同的app里的urls配置路由与视图函数的关系

  • 在不同的app里创建urls.py

  • 在总路由(项目名文件夹下的urls.py)里

    导入模块:
      from django.conf.urls import include 
    在urlpatterns列表里:
      url(r'^blog/',include('blog.urls')),
      url(r'^app01/',include('app01.urls')),
    
  • 在不同的app的urls里配置路由关系

注意 : 在总路由里,不能加结束符$

6.名称空间

给多个子路由里的url取了相同的名字,如name='test', 在app里访问这个名字就会出现问题

解决方法: 在总路由里分发时给其取个名称空间如namespace='blog'namespace='app01'

反向解析时由test变为blog:testapp01:test

eg:

1. 在总路由分发时给个名称空间
    url(r'^blog/',include('blog.urls',namespace='blog')),
    url(r'^app01/',include('app01.urls',namespace='app01')),
2. 子路由取相同的名字
    url(r'^publish/$', views.publish,name='test'),

3. 反向解析时:
    - 视图层:
        url = reverse('blog:test')
        url = reverse('app01:test')
    - 模板层:
        {% url 'blog:test'%}
        {% url 'app01:test'%}

一般不要这样用 给子路由里的url取名时加个app名字_前缀就可以了

eg:

url(r'^publish/$', views.publish,name='app01_test')

7. 伪静态

将动态网页伪装成静态的 , 提高百度被搜索的权重

静态网页: 网址的后缀是.html ,如https://www.cnblogs.com/liuqingzheng/p/9506212.html

其实是伪装出来的静态 , 本质是动态网页

伪装方法

在路由的正则末尾加上.html

-路由: url(r'^book/(?P\d+.html)',views.book),
-访问: http://127.0.0.1:8000/book/4.html

你可能感兴趣的:(路由层--简单配置,无名分组,有名分组,反向解析,路由分发,名称空间,伪静态)