路由
项目创建的时候有一个urls.py,这个是指定整个项目路由的入口,使用path指向对应的视图。
from django.contrib import admin
from django.urls import path
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
path(url正则表达式, 视图函数,别名)
路由匹配:调用path()函数匹配。如果匹配到直接返回不在往下匹配,如果匹配不成功返回404。
包含路由匹配
还可以包含路由的urls.py匹配,这样更加便于设计。
使用include包含子路由
项目的urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app1.urls'))
]
在对应创建的项目app1中新建urls.py 文件写入路由
应用的urls.py
from app1 import views
from django.urls import path, include
urlpatterns = [
path('app1/test', views.test )
]
app1下的views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return render(request, 'app1/index.html')
def test(request):
return HttpResponse("内部自己的url")
解析路由参数
app1中的urls.py
from app1 import views
from django.urls import path, include
urlpatterns = [
path('app1/test', views.test ),
path('app1/show/<int:id>', views.show )
]
views.py
def show(request, id):
return HttpResponse("url带的参数,id的值是 " + str(id))
解析url中的参数,格式为
<参数数据类型:参数名称>
- str 默认类型,字符串,不包含"/"
- int 整型
- slug ASCII类型、连字符和下划线
- uuid uuid格式的字符串
re_path匹配复杂的正则路由
(?P <name > pattern)
正则表达式 | 说明 |
---|---|
. | 任意单个字符 |
\d | 匹配任意一个数字 |
\w | 字母数字下划线 |
* | 匹配0个或多个 |
[a-z] | 匹配a-z任意一个小写字母 |
{1, 5} | 匹配1-5个字符 |
re_path('app2/list(?P<year>\d{4})/', view.list),
re_path('app2/list(?P<page>\d+)&key=(?<key>\w+)/', view.list)
如上所示,第一个匹配后面跟四位整数,第二个匹配第一个参数后面跟任意整数,第二个参数任意字符。
反向解析
urls.py中name的属性可以反向解析出路由地址。
应用中urls.py
path('app1/reverse/', views.url_reverse, name="app1_url_reverse")
views.py
from django.shortcuts import render, reverse
from django.http import HttpResponse
def url_reverse(request):
print("解析结果为:" + reverse("app1_url_reverse"))
return render(request, "app1/url_reverse.html")
在对应目录中添加模板
<div>
在html中反向解析<br />
{% url 'app1_url_reverse' %}
</div>