路由分发
1.路由分发
- 每一个应用都可以有自己的templates文件夹,urls.py,static文件夹
- 这个特点可以实现分布开发,每个应用之间互相不干扰
- 在所有的应用开发完成后,在总路由文件urls.py中配置即可
- 当项目中的url特别多的时候代码冗余,这时也可以使用路由分发来减轻总路由的负担
- 实现路由分发:
首先分别在不同的app中创建路由,编写视图函数,然后在主函数中分发路由实现方式如下
路由分发主要是用include来导入
- 方式一
from django.urls import path, re_path, include
from app01 import urls as app01_urls
from app02 import urls as app02_urls
# 路由分发
# 只要是app01开头都会交给app01的路由
re_path(r'^app01/', include(app01_urls)),
re_path(r'^app02/', include(app02_urls)),
- 方式二
无需导入app中的路由,直接引用
# 路由分发方式二
# 总路由里的正则表达式不能加$ 否则会匹配不到后面的地址
re_path(r'^app01/', include('app01.urls')),
re_path(r'^app02/', include('app02.urls')),
名称空间
2.名称空间(了解)
- 当许多个应用中出现了相同的别名时 Django不会自动识别是哪个app中的名称,
只会返回路由列表中第一个符合的路由
- 这里反向解析无法识别出哪一个
/app02/home/
[23/May/2021 23:47:05] "GET /app02/home/ HTTP/1.1" 200 10
/app02/home/
[23/May/2021 23:47:09] "GET /app01/home/ HTTP/1.1" 200 10
- 在总路由中加上名称空间能正确识别
re_path(r'^app01/', include(('app01.urls', 'app01'), namespace='app01')),
re_path(r'^app02/', include(('app02.urls', 'app02'), namespace='app02')),
print(reverse('app01:home'))
print(reverse('app02:home'))
/app02/home/
[24/May/2021 00:10:07] "GET /app02/home/ HTTP/1.1" 200 10
/app01/home/
[24/May/2021 00:10:11] "GET /app01/home/ HTTP/1.1" 200 10
- 前段的反向解析使用
{% url 'app01:home'%}
{% url 'app02:home'%}
- 实际开发中一般不需要名称空间 只要在每个app中路由的别名前加上app名称的前缀即可
伪静态
3.伪静态
- 静态网页
数据是写死的,不会改变
- 伪静态
将动态网页伪装成动态网页
- 伪装的目的是增大笨网站的seo查询力度,并且增加搜索引擎搜藏本网站的概率
- 无论怎么优化,都玩不过RMB玩家
- 实现伪静态的方式
re_path(r'^home.html', views.home, name='home')