路由层
1.简单配置
1 | 本质就是一个函数 |
默认值
1 | -url('正则',函数,默认值,name) |
2.无名分组
-按位置传参
在客户端的输入网址的时候会自动补全/
1 | -分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参 |
3. 有名分组
-按关键字传参
1 | -有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关 |
有名分组和无名分组,不要混用
注意
4. 反向解析
1含义
1 | 在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。 |
2通俗易懂的含义
1 | 就是我们按照正常的方法写模板层点击a标签的时候,不管路由怎么变,都能解析 |
但是当路由一变化,就找不到了
总结理解
1 | 所以说就是去解析一个动态的路由,也可以说是把模板的a连接和路由绑定在一起,自动进行解析 |
3代码语法
1.url路由层统一定义,让模板层或者视图函数去解析它
1.1先命一个名url源码urls.py的文件
1.2url.py无参数
1 | url(r'^publishadd133/$', views.publishadd,name='反向解析的名字'), |
1.3url.py无名分组
1 | url(r'^publishadd/([0-9]{4})/([0-9]{2})/$', views.publishadd,name='反向解析的名字'), |
1.4url.py有名分组
1 | url(r'^publishadd/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publishadd,name='反向解析的名字'), |
2.templates模板层文件夹的文件publish.html
去找到url里面的name=’反向解析的名字’这个参数名字
1.1publish.html无参数
1 | <a href="{% url '反向解析的名字' %}">点击进行反向解析</a> |
1.2publish.html无名分组
1 | <a href="{% url '反向解析的名字' 2020 12 %}">点击进行反向解析</a> |
1.3 publish.html有名分组
1 | 第一种 |
3.views.py视图层反向解析
先导入模块reverse
1 | from django.shortcuts import reverse |
1.views.py无参数
1 | def publish(request): |
1.2views.py无名分组
1 | def publish(request): |
1.3views.py有名分组
第一种
1 | def publish(request): |
第二种
1 | def publish(request): |
5.路由分发
第一步创建一个新的项目
1.自动创建第一个app,shouyue
2.手动创建第二个app,yuan
python manage.py startpp yuan
3.需要新建shouyue小项目app的路由urls.py文件
1.修改shouyue app 的urls.py
2.修改shouyue app 的views.py
1 | def publish(request): |
4.效果
5.整个流程总结
6 名称空间
-路径重命名,可能会重复,反向解析,就会出问题
-指定名称空间
1 | -url(r'^blog/',include('blog.urls',namespace='blog')), |
7 伪静态
1 | -路由:url(r'^book/(?P<id>\d+.html)',views.book), |
8, http://127.0.0.1:8000/ 访问这个路径,匹配到图书列表
1 | urlpatterns = [ |
5 路由匹配不上,调到404的页面
9.路由不会自动加斜杠
为假,不会加反斜杠
1 | # APPEND_SLASH=False |