0%
Theme NexT works best with JavaScript enabled
内容概要
路由匹配
无名有名分组
反向解析
无名有名分组反向解析(难理解)
路由分发
名称空间
伪静态
内容详细 路由匹配 1 2 3 4 5 6 7 8 9 10 11 12 urls.py url()方法第一个参数其实是一个正则表达式 第一个参数只要能够匹配到内容就算是符合匹配条件直接停止匹配执行视图函数 url(r'^test/$' ,views.test), url(r'^testadd/$' ,views.testadd) APPEND_SLASH = False
无名分组 1 2 3 在路由匹配的时候如果给正则表达式加上了括号 那么匹配到路由之后会将括号内正则表达式匹配的到内容当做位置参数传递给视图函数 url(r'^test/(\d+)/(\d+)/' ,views.test)
有名分组 1 2 3 在路由匹配的时候如果给正则表达式加上了括号并且命名 那么匹配到路由之后会将括号内正则表达式匹配的到内容当做关键字参数传递给视图函数 url(r'^testadd/(?P<user_id>\d+)/' ,views.testadd)
两者结合使用? 1 2 3 4 5 6 url(r'^testsub/(\d+)/(?P<sub_id>\d+)/' ,views.sub) 无名有名分组两者不能混合使用!!! 单独的情况下可以重复多次!!! url(r'^testsub/(\d+)/(\d+)/' ) url(r'^testsub/(?P<sub_id>\d+)/(?P<sub_id>\d+)/' )
反向解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 """ 通过别名反向解析到一个结果 该结果可以访问到对应的视图函数 """ 前端页面反向解析 {% url 'index_view' %} 后端流程反向解析 from django.shortcuts import render, HttpResponse, redirect, reverse def func (request ): _url = reverse('index_view' ) print (_url) return redirect('index_view' )
无名有名反向解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 url(r'^login/(\d+)/' ,views.login,name='login_view' ) reverse('login_view' ,args=(1 ,)) {% url 'login_view' 1 %} url(r'^reg/(?P<user_id>\d+)/' ,views.reg,name='reg_view' ) reverse('reg_view' ,kwargs={'user_id' :666 }) {% url 'reg_view' user_id=123 %} """无论是无名分组还是有名分组的反向解析都可以使用一样的格式""" url(r'^reg/(?P<user_id>\d+)/' ,views.reg,name='reg_view' ) reverse('reg_view' ,args=(123 ,)) {% url 'reg_view' 123 %}
路由分发 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 当django的app特别多的时候 一个urls.py太过冗余 在django中每一个app都可以拥有自己的urls.py static文件夹 templates文件夹 路由分发 总路由不再做url与视图函数直接匹配 而是先根据url分辨出请求哪个业务 之后分配给下面的app再去匹配视图函数 复杂版本 from app01 import urls as app01_urlsfrom app02 import urls as app02_urlsurl(r'^app01/' ,include(app01_urls)), url(r'^app02/' ,include(app02_urls)), 简化版本 url(r'^app01/' ,include('app01.urls' )), url(r'^app02/' ,include('app02.urls' )),
名称空间 1 2 3 4 5 6 7 8 9 10 11 12 13 多个应用在反向解析的时候出现了别名冲突的情况 django是无法做到一一对应的 >>>名称空间 url(r'^app01/' ,include('app01.urls' ,namespace='app01' )), url(r'^app02/' ,include('app02.urls' ,namespace='app02' )), reverse('app01:index_view' ) reverse('app02:index_view' ) {% url 'app01:index_view' %} {% url 'app02:index_view' %} 只需要确保多个应用之间别名也不冲突的情况 eg:起别名的时候加上应用名前缀
伪静态页面 1 2 3 4 5 6 7 静态页面 页面上的数据一般都是直接写死的 伪静态页面 目的是为了提升网页被SEO查询出来的概率 如何优化都干不过RMB玩家 """所有的搜索引擎都是爬虫程序"""