- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解django中url路由配置及渲染方式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
今天我们学习如何配置url、如何传参、如何命名、以及渲染的方式,内容大致有以下几个方面.
创建视图并访问 。
项目中自带的python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py.
然后在views.py中,导入头文件 。
1
|
from
django.http
import
httpresponse
|
然后我们在views.py中,写一些python函数,用来访问 。
1
2
|
def
hello(request):
/
*
request用户的请求
*
/
return
httpresponse(‘hello,欢迎来到django')
|
在url.py中为视图函数配置路由 。
1
2
3
4
5
6
|
from
django.urls
import
path
from
.
import
views
urlpatterns
=
[
path(
'hello'
,hello),
]
|
运行项目,如果上传方式是ctrl+s的话,记得上传之后再运行,成功后 。
浏览器输入 127.0.0.1:8000/hello 即可访问到 。
创建app 。
创建app的方式不只一种,在虚拟机里可以创建,也可以在pycharm里创建 。
命令为:python manage.py startapp appname 。
在虚拟机里创建完,要在pycharm中下载下来 。
在pycharm中创建:
方式一:
项目运行成功后,在terminal里面找到本项目,输入命令 python manage.py startapp appname 。
如果没有连接本地,则需要重新连接 。
方式二:
tool ----> run manage.py projectname 。
startapp appname 。
此方法也需要下载下来 。
下载完成后,创建的app就出现了.
url规则 。
1、网址组成 。
网址:全球统一资源定位符 。
https://www.i.cnblogs.com/editposts.aspx?postid=10423125 。
这是本文网址,做个栗子吧 。
https://www.i.cnblogs.com/editposts.aspx?postid=10423125 。
协议 域名 路径 参数 。
django只搜索路径部分,与其他都无关 。
2、django的路由系统 。
当一个请求来到 。
1、首先到项目目录下,url.py里查找路由规则 。
2、跟urlconf模块,里面定义了urlpatterns变量 。
3、按顺序运行每一个,到第一个匹配的模式停止 。
4、一旦匹配,django导入并调用给定的视图 。
5、如果没有匹配到,或者中间出错,则返回404 。
3、path里参数的含义 。
1
|
path(route,view,kwargs
=
none,name
=
none)
|
route : (必须有)是一个字符串的url规则 。
view : (必须有)是个视图 。
kwargs :(可有可无)额外参数,是字典类型,传递给view 。
name :(可有可无)url名字 。
4、在url中捕获参数 。
尖括号 < 参数 > 可以捕获参数,传递给视图 。
本来捕获的值是字符串 。
如果要捕获两个参数,尖括号间可用/斜杠,也可用-连接符,但访问要一致 。
5、路径转化器 。
如果想要让捕获的参数符合条件,那么我们会用到路径转化器 。
符号是冒号 : eg:<int:age> 。
常用的路径转化器 。
6、正则表达式 。
前面我们学习到路径转化器,但是有时候我们的转化器并不能够完全满足我们捕获参数的条件,像int转化器去捕获年份,如果我们传入10000,肯定会捕获呀,但不合理,因此,我们正则表达式可以更好用一些.
使用时,首先要导入进来 form django.url import re_path 。
参数跟path里相同 。
下面看正则表达式的方法用什么捕获方式 。
第一种是分组的,在视图中根据参数名传参 。
1
|
re_path(r
'plan/(?p<year>\d\d\d\d)/(?p<month>[0-9]|1[0-2])/'
,plan),
|
年 四位数,月 0-9 或者1和0-2 。
第二种是不分组的,在视图中安位置传参 。
1
|
re_path(r
'plan/(\d{4})\([0-9]|1[0-2]/'
,plan),
|
\d\d\d\d与\d{4}含义相同,都是四位整数 。
7.主路由分配给分路由 。
如果所有是url都在主路由下配置,那么对于检查和维护修改都会带来不便,因此我们需要将主路由分配给各个app下的路由 。
方式:include() 。
使用方法:先需要导入, 。
1
|
from
django.urls
import
path,include
|
使用: eg,名为teacher的app,将主路由分给teacher.url 。
path(‘teacher/',include('teacher.urls')).
在teacher-app中,创建urls.py(因为新建的app没有自带url.py) 。
在teacher.url.py中,手动输入 。
1
2
|
form django.urls
import
path
from
.views
import
*
|
这里的views是此app里的views 。
include可以多级使用 。
include的原理:当遇到include时,路径就被切断,然后在include包含的分路由中开始继续检索.
在path(‘teacher-<age>/',include('teacher.urls')),里面传参是可以的,就是分路由每个都要传参.
8、传递额外参数 。
当在路由中传入额外参数时,如果kwargs中key值与捕获参数不一致,按照kwargs为准.
如果在include后,传递的话,那么相当于此分路由各个url后都有此额外参数.
9、app_name的作用 。
-页面重定向 。
redirect 可以实现页面跳转 。
导入 from django.shortcuts import render,redirect,reverse[/code] 。
使用 return redirect(‘网址或者路径') 。
-reverse 。
如果给path里加入name参数,reverse(name)就等于前面路径 。
因此实现页面跳转,可以设变量url=reverse(name的值) 然后return redirect(url)即可实现 。
-app_name 。
那我们的name就不可以设为一样的吗?
在不同app下其实可以一样,但需要使用app_name 。
在url.py里urlpatterns前写 。
app_name = ‘appname' 。
使用:
1
|
url
=
reverse(appname:name)
|
10、模板系统 。
html源码写到模板文件中 。
-模板路径设置 。
在项目中创建templates文件夹,在文件夹内创建跟app同名的文件夹 。
主目录下settings.py中找到 然后写入 。
1
2
3
4
5
6
|
templates
=
[
{
'backend'
:
'django.template.backends.django.djangotemplates'
,
'dirs'
: [os.path.join(base_dir,
'templates'
)],
...
}
|
-渲染 。
在templates下写的html要如何使用呢?
在需要使用的视图中引用 。
1
2
|
from
django.template.loader
import
get_template
from
django.shortcuts
import
render
|
使用时需要渲染,用render 。
1
2
3
4
|
def
new(request):
fg
=
get_template(
'student/index.html'
) 路径从templates往下的开始写
html
=
fg.render()
return
httpresponse(html)
|
访问此视图,html模板即可被渲染出来 。
另一种更简便的方法 。
1
2
|
def
new(request):
return
render(request,
'student/index.html'
)
|
这次就到这里,下一篇会深入模板变量哦.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/bdydrq/p/10423125.html 。
最后此篇关于详解django中url路由配置及渲染方式的文章就讲到这里了,如果你想了解更多关于详解django中url路由配置及渲染方式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在阅读有关汇编函数的内容,但对于是使用进入和退出还是仅使用调用/返回指令来快速执行,我感到很困惑。一种方式快而另一种方式更小吗?例如,在不内联函数的情况下,在汇编中执行此操作的最快(stdcal
我正在处理一个元组列表,如下所示: res = [('stori', 'JJ'), ('man', 'NN'), ('unnatur', 'JJ'), ('feel', 'NN'), ('pig',
最近我一直在做很多网络或 IO 绑定(bind)操作,使用线程有助于加快代码速度。我注意到我一直在一遍又一遍地编写这样的代码: threads = [] for machine, user, data
假设我有一个名为 user_stats 的资源,其中包含用户拥有的帖子、评论、喜欢和关注者的数量。是否有一种 RESTful 方式只询问该统计数据的一部分(即,对于 user_stats/3,请告诉我
我有一个简单的 api,它的工作原理是这样的: 用户创建一个请求 ( POST /requests ) 另一个用户检索所有请求 ( GET /requests ) 然后向请求添加报价 ( POST /
考虑以下 CDK Python 中的示例(对于这个问题,不需要 AWS 知识,这应该对基本上任何构建器模式都有效,我只是在这个示例中使用 CDK,因为我使用这个库遇到了这个问题。): from aws
Scala 中管理对象池的首选方法是什么? 我需要单线程创建和删除大规模对象(不需要同步)。在 C++ 中,我使用了静态对象数组。 在 Scala 中处理它的惯用和有效方法是什么? 最佳答案 我会把它
我有一个带有一些内置方法的类。这是该类的抽象示例: class Foo: def __init__(self): self.a = 0 self.b = 0
返回和检查方法执行的 Pythonic 方式 我目前在 python 代码中使用 golang 编码风格,决定移动 pythonic 方式 例子: import sys from typing imp
我正在开发一个 RESTful API。其中一个 URL 允许调用者通过 id 请求特定人员的记录。 返回该 id 不存在的记录的常规值是什么?服务器是否应该发回一个空对象或者一个 404,或者其他什
我正在使用 pathlib.Path() 检查文件是否存在,并使用 rasterio 将其作为图像打开. filename = pathlib.Path("./my_file-name.tif") 但
我正在寻找一种 Pythonic 方式来从列表和字典创建嵌套字典。以下两个语句产生相同的结果: a = [3, 4] b = {'a': 1, 'b': 2} c = dict(zip(b, a))
我有一个正在操裁剪理设备的脚本。设备有时会发生物理故障,当它发生时,我想重置设备并继续执行脚本。我有这个: while True: do_device_control() device
做组合别名的最pythonic和正确的方法是什么? 这是一个假设的场景: class House: def cleanup(self, arg1, arg2, kwarg1=False):
我正在开发一个小型客户端服务器程序来收集订单。我想以“REST(ful)方式”来做到这一点。 我想做的是: 收集所有订单行(产品和数量)并将完整订单发送到服务器 目前我看到有两种选择: 将每个订单行发
我知道在 Groovy 中您可以使用字符串调用类/对象上的方法。例如: Foo."get"(1) /* or */ String meth = "get" Foo."$meth"(1) 有没有办法
在 ECMAScript6 中,您可以使用扩展运算符来解构这样的对象 const {a, ...rest} = obj; 它将 obj 浅拷贝到 rest,不带属性 a。 有没有一种干净的方法可以在
我有几个函数返回数字或None。我希望我的包装函数返回第一个不是 None 的结果。除了下面的方法之外,还有其他方法吗? def func1(): return None def func2(
假设我想设计一个 REST api 来讨论歌曲、专辑和艺术家(实际上我就是这样做的,就像我之前的 1312414 个人一样)。 歌曲资源始终与其所属专辑相关联。相反,专辑资源与其包含的所有歌曲相关联。
这是我认为必须经常出现的问题,但我一直无法找到一个好的解决方案。假设我有一个函数,它可以作为参数传递一个开放资源(如文件或数据库连接对象),或者需要自己创建一个。如果函数需要自己打开文件,最佳实践通常
我是一名优秀的程序员,十分优秀!