url结构:
例子:http://www.baidu.com:8080/news/index.html?id=1111%page=12#name
协议// 域名(ip):端口/ 路径 ? 参数 #锚点
1.url:
网址 全网统一资源定位符
格式
2.django 的路由系统
当一个请求来到时
1.首先到项目目录下的urls.py(根URlconf模块)中,查找路由规则
2.根URlconf模块,里面定义了 urlpatterns变量
3.urlpatterns 是一个(django.url.path 或 django.urls.re_path对象 )列表
4.按顺序运行每个url模式,在第一个匹配的模式停止
5.一旦匹配,djangon导入并调用给定的视图
6.如果中间出错,或者没有匹配到,返回404
-path对象
path(route,view,kwargs=None,name=None)
router参数: 一个字符串的urlf规则
可以传参数
例: path('index/<参数1>-<参数2>',view) #传递了 参数1,参数2 用 -间隔, 可以用其他符号
path('index/<pk>-<date>',view1) url: http://0:8000/index/1-201801
path('index/<pk>/<date>',view1) url: http://0:8000/index/1/201801
在视图中 定义 def index(request,pk,date): # 必填参数
return HttpResponse('lalallalala %s%s' %(pk, date))
-在url中捕获参数
在url规则中使用<变量名>可以捕获url中的值
传递给视图
**默认捕获值是 str 字符串
path('index/<int:pk>',view1) # 定义参数的数值类型
1.str 匹配了'/'路径分割符之外的所有字符
2.int 匹配任意整型 ,会转换成 int 类型
http://192.168.3.20:8000/detail/12/
参数值为:12
3.slug 匹配任意ascll字符 加上连字符和下划线
4.uuid 格式化id
http://192.168.3.20:8000/uuider/9b1deee5-4035-4398-b5f9-54ba28c94566/
参数值为:9b1deee5-4035-4398-b5f9-54ba28c94566/
5.path 匹配任意非空字符
http://192.168.3.20:8000/pather/a/b/c/
参数值为:a/b/c/
-使用正则表达式re_path()
re_path(r'student/(\d{4})/([0][1-9]|1[0-2])/', views.student)
http://192.168.3.20:8000/student/2018/09/
re_path(r'student/(?P<year>\d{4})/(?P<month>[0][1-9]|1[0-2])/', views.student)
?P<year> ?P<month> 指定变量
python 中正则表达式的分组命名 (?P<name>正则表达式)
- django 搜索url 搜索什么?
只搜索url的路径部分, 跟 参数 以及请求方法 无关
同一个url 可以匹配 get post
-传递额外参数kwargs
kwargs 字典类型
path('detail/<int:pk>/', views.detail, kwargs={'pk':20})
额外参数和 路径中捕获的参数 同名时, 覆盖路径中的参数
path('detail/<int:pk>/', include('teatch'), kwargs={'pk':20})
下级url组中teatch下url都 将带上 这个额外参数
-包含其他 URLconfs
include
根urls
urlpatterns =[
path('teatch/',include('teacher.urls')) 导入子app 'teacher'下的urls
path('teatch/<参数>',include('teacher.urls')) 导入子app 'teacher'下的urls
]
上级路径中的参数和额外参数 会传到下级路径 对象中去.
子app urlpatterns
1.views 应该写在app的目录中
app的urls
http://192.168.3.20:8000/teacher/detail/2018/09/)
子app中下级路径
-重定向
view 中
from django.shortcuts import render, redirect ,reverse
# 导入 render渲染(作用把对象变成 文本, 用于返回给服务器)
# redirect重定向
# reverse 解析path对象的 name
例: path('index/',views.index,name='index')
path('news/',views.news,name='news')
在view 中
def index(request):
url = reverse('path对象名') #返回 url
return redirect(url)
path(name='index') 作用 路径不管怎么改都不影响 url 功能
-app_name =app名称
定义在app文件夹下的urlconf模块中
reverse('student:index') student为 app_name; 多个app都可以有 name名为index 的path对象名
2.模板系统
html 源码写到模板文件中
-模板路径设置
项目目录下的settings.TEMPLATES
BACKEND:模板引擎
DIRS:模板路径 (一般模板放在项目根目录下.)
DIRS: [os.path.join(BASE_DIR, 'templates')] #项目根目录下的templates目录
在视图文件中
from django.template.loader import get_template
def index(request):
#如果模板文件index.html 在项目根目录\templates\teacher\index.html
tp = get_template('teacher/index.html') #直接写templates之后的路径/index.html,之前的 已经在setting中设置
html = tp.render() # 渲染 成 str字符串
return HttpResponse(html)
#return render(request,'teacher/index.html') 代替上的3句(快捷方式)
网友评论