实验环境:deepin操作系统
在Django中2.X版本,就更新为path了,其实也不算是更新,叫做添加path新特性应该更合适。我也是一名学习新手,刚开始接触Django这个开源框架,在视图显示这块,卡在path和url之间。下面介绍一下自己的对urls.py中Path的配置。
1、文件夹中创建的项目文件,项目名称为test1 ,创建的应用为booktest
test1/
├── booktest
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-36.pyc
│ │ └── __init__.cpython-36.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-36.pyc
│ │ ├── __init__.cpython-36.pyc
│ │ ├── models.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── views.cpython-36.pyc
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.sqlite3
├── __init__.py
├── manage.py
└── test1
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── settings.cpython-36.pyc
│ ├── urls.cpython-36.pyc
│ └── wsgi.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
说明:创建test1/booktest/urls.py之后并让其包含在test1/test1/urls.py文件里,是为了方便管理url路径
2、文件:test1/test1/urls.py 配置
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^', include('booktest.urls'))
]
以上两行代码对比,可以看出,path 和 re_path 其实功能是一样的,但是其参数要求却不同。
函数 path() : 两个必须参数:route(路由)和 view(视图),两个可选参数:kwargs 和 name。 那么与旧版本的参数主要区别: url()中【路由参数:正则表达式】,而path()【路由参数:非正则表达式】 path()函数的四个参数含义: 1、path()参数:route route 是一个匹配URL的准则(类似正则表达式)。当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。 这些准则不会匹配GET和POST参数或域名。例如,URLconf在处理请求https://www.example.com/myapp/时,它会尝试匹配myapp/。处理请求https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。 2、path()参数:view 当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个HttpRequest对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。 3、path()参数:kwargs 任意个关键字参数可以作为一个字典传递给目标视图函数。 4、path()参数:name 为你的URL取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个URL模式
遇上路径和转换器语法都不足以定义的URL模式,就需要使用正则表达式:也就是说 re_path() 和 path() 路由参数不同。如果需要用正则表达式来设置路由就选择re_path()
3、文件:test1/booktest/urls.py 配置
from django.urls import path,re_path
from . import views
urlpatterns = [
re_path(r'^$', views.index,),
]