path 和 re_path 语法
-
path
orre_path
语法
path(route, view, kwargs=None, name=None)
re_path(route, view, kwargs=None, name=None)
route
:路径。端口以后的地址view
:route 匹配成功后调用的视图(函数,或者 class_.as_view()转换为的函数)kwargs
:额外的参数name
:别名。该url的别名
三种路由形式
1.精确字符串形式
from django.urls import path
from app01 import views as s_views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', s_views.LoginView.as_view())
]
app01 / views.py
from django.http import HttpResponse
from django.views import View
class LoginView(View):
def get(self, request):
# ...
return ..
def post(self, request):
# ...
return ...
def score(request, score_id):
# do something
return HttpResponse(..)
def about(request, page, detail):
# do something
return HttpResponse(..)
def articles(request, year, month):
# do something
return HttpResponse(..)
2.路径转换器格式
from django.urls import path
from app01 import views as s_views
urlpatterns = [
path('score/<str:score_id>', s_views.score, name=score),
path('about/<int:page>/<str:detail>/', s_views.about)
]
- 格式转换类型
类型 | 说明 |
---|---|
str | 匹配/ 除外的非空字符;默认 <year> 等价于<str:year> |
int | 匹配0和正整数 |
slug | 匹配字母、数字、横杠、下划线 |
uuid | 匹配格式化的UUID |
path | 匹配任何非空字符串(包括路径分隔符) |
3.正则表达式形式
(?P<name>re_pattern)
name
:变量名re_pattern
:正则匹配模板
from django.urls import re_path
from app01 import views as s_views
urlpatterns = [
re_path('score/(?P<score_id>[a-zA-Z]{1,8})', s_views.score, name=score),
re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/', s_views.articles)
]
include包含路由
from django.urls import path, include
from app01 import views as s_views
urlpatterns = [
path('score/<str:score_id>', s_views.score, name=score),
path('about/<int:page>/<str:detail>/', s_views.about),
path('app02/', include('app02.urls'))
]
app02/urls.py
- 用
app_name = '***'
来设置命名空间,避免和其他应用的同名 url 混淆
from django.urls import path,re_path
from . import views
# 设置命名空间
app_name = 'app02'
urlpatterns = [
path(...),
path(...)
]