Django(五):路由控制

一 Django中路由的作用

本质URL配置(URLconf)就是与要为该URL调用的视图函数之间的映射表

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
  • 正则表达式:一个正则表达式字符串
  • views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
  • 参数:可选的要传递给视图函数的默认参数(字典形式)
  • 别名:一个可选的name参数
from app01 import views
url(r'^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.test)

'^test/$'    ^是以test开头,$是以test/为结尾(当test后面没有内容时浏览器会自动补全/)

# 在settings中设置成false,再带后缀斜杠,浏览器就不能匹配该网址了
APPEND_SLASH=False

伪静态页面

# .html对于百度对网站进行SEO优化的权限相对会更高,方便被检索
url(r'^get_book/(\d+).html', views.test3),

 浏览器输入:127.0.0.1:8000/get_book/3.html
urls.py:

url(r'^get_book/(\d+).html',views.test.3)

views.py:

def test3(request,nid):    #注意传入两个参数需要在函数内也要传入两个形参
    return HttpResponse('我是这本书的详情'+nid)

# 浏览器显示结果:
# 我是这本书的详情3

 路由关系小结:

基础知识,无名分组:url(r'^admin/', admin.site.urls),
    # 第一个参数,可以写一个正则表达式
    # 从上往下匹配,一旦匹配成功,就不往下走了
    # 如果分几个组,相应的视图函数,就应该接收几个
    # 在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败
    # 伪静态,方便搜索引擎收录

有名分组小结:

    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、可以设置默认值 

import re
# 括号---》分组
ret=re.search('test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})','test/2015/12')
print(ret.group())
print(ret.group(1)) #按位置,取了组内第1个:?P<year>[0-9]{4})  结果:2015
print(ret.group(2)) #按位置,取了组内第2个:?P<month>[0-9]{2})
print(ret.group('year'))    # ?P<> 为有名分组,按关键名来取值 结果:2015
print(ret.group('month'))

路由分发:

    1、先在app01、app02...的urls.py中导入from django.conf.urls import include
    2、路由分发,有两种方式:(推荐使用方式二)
        (1)    from app01 import urls
                 from app02 import urls as urls2
                 url(r'app01/',include(urls)),
        (2)    url(r'^app01/', include('app01.urls'))
    3、在相应的app里创建urls.py文件,建议,不要改名字
    4、urlpatterns不能变名字 ,后面的写法就一样了 url(r'^test',views.test3 ),
    5、重复上面步骤,分发多个 

在版本上对于path的不同使用:
版本2.x和版本1.x的区别
    1 2.x的re_path 就是我原来的url
    2 2.x多了一个path,不支持正则

反向解析

    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的时候,其它地方不需要改动

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值