Django路由分配以及模版渲染
路由上:
在网络上区分不同的电脑通过IP、端口和网卡的MAC地址等,在web框架中怎么区分不同的请求呢,就是通过 ‘url(路由)’ ,url 学名叫做全球统一资源定位符,其实就是一个网址
一个url通过不同的部分来组成
在创建好的django项目里面,manage.py 所在的文件夹是项目的根目录,settings.py 所在的文件夹是项目文件夹
在项目文件夹下面有一个urls.py,打开后里面有一个urlpatterns 变量,这个就是路由模式,整个urls.py文件,又叫 url 配置模块
Django服务运行起来之后,当有一个请求时,Django首先会去项目文件下的 urls.py文件里面去找 urlpatterns 变量,urlpatterns 它其实就是一个Django.urls.path的一个列表,这个方法就定义了路由规则
path( ' admin/ ', admin.site.urls ),
这段代码括号里面,前面的 admin/ 就是 url 的路径,django会按照你这里面定义的顺序依次去匹配接受到的请求是否等于这个路径,如果等于,就会调用后面的方法admin.site.urls ,它可能是一个视图,或者是一个include。
视图一般会写在views.py文件夹内,这里我先暂时在项目文件夹里面创建一个视图文件(实际上如果有多个app的话,不能直接在项目文件夹下直接创建views.py文件)
然后在视图内写上第一个视图
然后在 urls.py 文件里面去映射这个函数,给它一个 first 的路径
映射好之后,打开浏览器输入 127.0.0.1:8000/first/,就可以看到效果了
同时还有一点,一旦编写了 urls.py 的话,再输入127.0.0.1:8000 就看不到Django的欢迎页面了
这就是路由的作用,接受请求后到urls.py里面找 urlpatterns 变量,然后在里面将接受到的请求和路径进行匹配,匹配到就调用后面的方法,匹配不到就返回404页面
路由下:
path ( route , view , kwargs=None , name=None )
route : 是一个字符串 url规则
view : 是一个视图(后面不要加上括号)
kwargs : 额外的参数,是一个字典
name : url规则的名字
我练习做的是一个crm管理系统,如果我想要获取到某个人的具体信息,就需要添加第二个形参
def studeng_detail_view( request , pk ):
return HttpResponse( ' 学号为%s的学生信息为 ' %pk )
然后在urls.py文件里面 urlpatterns 变量下面添加一行
path( ' student / < pk > / ' , views.studeng_detail_view )
视图函数里面增加一个 pk 的形参(也可以叫主键( kwargs ),后面通过这个pk主键去数据库里面取值),在配置url的时候,就涉及到了一个捕获参数,在路径后面跟一个 / < > /,就可以将路径后面捕获到的传递给视图函数 ,url 里面 < > 内的必须要和视图函数里面的形参相对应
在浏览器内输入路径的时候,要在 student 后面多加上一个路径
这里不但可以是整数,也可以是字符串,但这里要怎么限制这里为整数呢,django提供了一个转换器
path( ' student / < int : pk > / ' , views.studeng_detail_view )
在pk里面加上一个int:就可以限制只能是整数,也可以换成 str 等
str 匹配所有除了路径分隔符(/)之外的字符串,不添加转换器默认为 str
int 匹配任意0或正整数
slug 匹配任意的ASII字符或数字组成的slug字符,连字符和下划线
path 匹配任何非空字符串,包括路径分隔符
转换器在转换之后,这个形参就会根据转换器变成相应的格式
如果有两个或多个参数
path( ' two / < year > / < month > / ' , views.student_list_view )
有几个形参,在路径后面就要加几个 /<>/
如果想要进行进一步限制,可以使用正则 re_path
re_path( r ' two / (?P<year>\d{4} ) - (?P<month>0[1-9] | 1 [0-2]) / ' , views.student_list_view )
实际项目视图文件views.py都是在app下面,在app内建立urls.py映射视图,然后用include将url配置文件包含到根url配置文件内
应用下views.py
应用下urls.py
根目录下urls.py文件内通过include把子url配置文件包含进根url配置文件内
效果
接受到请求后,只要是以teacher/开头的请求,就会把teacher/之后的路径部分拿到include映射的子url配置文件内进行匹配
url重定向,命名,反向解析
redIrect
当访问调用这个视图函数的时候,就会重定向到百度页面
定义两个视图函数,第二个视图函数被调用的时候重定向的是第一个视图函数的路径,第二个函数被调用的时候就会返回一个请求,返回的这个请求就是第一个函数的路径请求
在一个项目中可能会有很多很多的路径和重定向,这么写的话,一旦有需要修改的地方就会很麻烦,这里需要在视图文件内导入 reverse方法,
如果多个app下面的name名称有相同的,那么在每个app下面urls.py文件里面添加一行
app_name=' appname ' #appname 为文件夹的名字
然后在解析的时候要加上appname:
模版
django提供了一套完整的模版渲染机制,可以将HTML源码写在模版中然后通过方法处理之后再返回给客户端
模版存放在特定的地方
在settings.py文件里面有一个TEMPLATES的模版变量,这个地方就是设置模版配置的
在DIRS里面就可以配置模版路径
一般模版文件在项目根目录下创建要给templates文件夹,然后在DIR后面输入 os.path.join(BASE_DIR,'templates')
创建好templates文件夹之后,要在这个文件夹内创建名称和app相同的文件夹,然后在里面再创建HTML文件
创建好的HTML文件在views.py文件夹内进行渲染
但这样写有点麻烦,可以通过render来实现同样的效果
Django路由分配以及模版渲染的更多相关文章
- Django路由分配及渲染
一.url路由分配 1.url配置的本质是将浏览器传递过来的路径和参数与服务器中的视图向匹配,并返回浏览器相应的视图函数. 2.url路径path规则 path(route, view, kwargs ...
- 02-url路由分配及模板渲染方式
本章主要内容 1.url基本概念及格式 2.path和re_path 3.模板路径配置 4.模板渲染方式 1.url基本概念及格式 URL(uniform Resoure Locator)统一资源定位 ...
- Django 命令行调用模版渲染
首先我们需要进入 Django 的 shell python manage.py shell 渲染模版中的 name from django.template import Context,Templ ...
- Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法
Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法 路由的分配中, 可以设定相应的转换器加以约束,比如 ...
- 3/19 Django框架 url路由配置及模板渲染
3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...
- django第三天(路由基础和路由分配)
路由基础 url(正则路径,视图函数地址,默认关键字参数,路由别名) 路由由上而下匹配, ""可以匹配任意路由 "^$"来匹配"/" url ...
- django 路由系统,数据库操作
一.修改配置 数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': ...
- Python菜鸟之路:Django 路由、模板、Model(ORM)
Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...
- Django路由详解
一.路由基础 1.路由url函数:路由自上而下进行匹配:url(正则路径,视图函数内存地址,默认参数,路由别名) 2.路由正则: 规定开始:^ | 规定结束:$ #url(r'index', view ...
随机推荐
- Qt中事件分发源码剖析
Qt中事件分发源码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,而且进行分发,这些都是在exec中进行的. 以下举例说明: 1)首先看看以下一段演示样例代码: ...
- 如何解决SQL Server 2008 无法连接到(local)
打开SQL SERVER配置管理-->SQL SERVER 网络配置-->实例名的协议 将SQLEXPRESS协议中的Named Pipes和 TCP/IP启用. 点击SQL Se ...
- BZOJ4320 homework
Description:给定\(n\)个操作,向集合中加入一个数(保证每个数不同)或者查询集合内\(\text{%Y}\)的最小值 Solution:对于小于\(\sqrt{300000}\)的直接暴 ...
- 【搭建Saltstack运维工具】
目录 所谓Salt 开始搭建 配置接受密钥 salt命令 YAML详解 目标定位字符串 state模块定义主机状态 Salt采集静态信息之GrainsSalt @(Saltstack) *** 所谓S ...
- 【Henu ACM Round#17 A】Simple Game
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是放在m-1或者m+1的. (m-1是左边的点都离a最近,而m+1则是右边的点都离他最近. 看看哪个更好就行 [代码] #inc ...
- CSUOJ 1551 Longest Increasing Subsequence Again
1551: Longest Increasing Subsequence Again Time Limit: 2 Sec Memory Limit: 256 MBSubmit: 75 Solved ...
- 解决WIN7远程登录提示无法保存凭据的问题
事由:今天到公司,想起手上还有点小东西没有改动完,就打算连上server进行小改动.结果发现昨天还能好好的远程连接server的WIN7,今天突然间不能远程登录了~ 无奈~悲催~ 我仅仅能猜是不是有什 ...
- NStimer 被堵塞
我们在界面上滚动一个scrollview,那么我们会发如今停止滚动前,会发现NSTimer未被运行.就好像scrollView在滚动的时候将timer暂停了一样,在查看对应文档后发现,这事实上就是ru ...
- vim-normal多行操作命令的使用
命令行命令-<:normal>这个命令可以重复上一个操作.他其实就跟.命令的效果查不到.不同的是,他可以把.的效果,作用于你用可视模式下的多行.例如,如果你想在下面的文字里在每一行加一个; ...
- 三个角度解构云计算,商业驱动or技术驱动?
从云计算的使用者到云服务的输出者,大多互联网公司在过去一年完成了角色的转换,也让云计算的未来更加扑朔迷离.不过,抛却进入时间这个评判因素,单从技术和商业化的角度来解构云计算的话,对于云计算的格局以及未 ...