创建父级结构
django-admin startproject url_project
进入父级目录
cd url_project
python manage.py startapp url_app
str:匹配任何非空字符串,不包括路径分隔符’/'。如果转换器不包含在表达式中,这是默认值。
int:匹配零或任何正整数。返回一个int。
slug:匹配由ASCII字母或数字组成的字符串,以及横线和下划线字符。例如, building-your-1st-django_site可以匹配,django_@site是不可以匹配的。
uuid:匹配格式化的UUID。为防止多个URL映射到同一页面,必须包含破折号,并且字母必须是小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID实例。
path:匹配任何非空字符串,包括路径分隔符 ‘/’,可以匹配完整的URL路径,而不仅仅是URL路径的一部分str,使用时要谨慎,因为可能造成后续的所有url匹配都失效。
在父级url
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('url_app/', include('url_app.urls'))
]
在子级url
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [path('articles/2003/',views.articles_2003),path('articles//',views.articles_year),path('articles//', views.articles_year_month),path('articles///', views.articles_year_month_slug),path('articles//',views.articles_str),path('articles//',views.articles_path),path('articles//',views.articles_uuid)
]
在子级view
from django.shortcuts import render, HttpResponse# Create your views here.def articles_2003(request):return HttpResponse('articles_2003')def articles_year(request, year):return HttpResponse(f'articles_year.year{year}')def articles_year_month(request, year, month):return HttpResponse(f'articles_year.year{year},{month}')def articles_year_month_slug(request, year, month, slug):return HttpResponse(f'articles_year.year{year},{month},{slug}')def articles_str(request,username):return HttpResponse(f'articles_str,username:{username}')def articles_path(request,path):return HttpResponse(f'articles_str,path:{path}')def articles_uuid(request,uuid):return HttpResponse(f'articles_str,uuid:{uuid}')
从URL中捕获值,请使用尖括号
捕获的值可以选择包含转换器类型。例如,用于 int:name捕获,前面的int指整数参数,name是参数的名称
没有必要添加一个前导斜杠,因为每个URL都有,例如,使用articles而不是/articles。
示例请求说明:
/articles/2005/03/ 匹配列表中的第三个条目。Django会调用这个函数,views.month_archive(request, year=2005, month=3)
/articles/2003/ 会匹配列表中的第一个模式,而不是第二个模式,因为模式是按顺序测试的,而第一个模式是第一个要传递的测试。看看利用匹配顺序插入像这样的特殊情况。在这里,Django会调用这个函数 views.special_case_2003(request)
/articles/2003 不匹配任何这些模式,因为每种模式都要求URL以斜线结尾,不过在浏览器访问时,会自动添加 / 。
**/articles/2003/03/building-a-django-site/ **将匹配最终模式。Django会调用这个函数 。views.article_detail(request, year=2003, month=3, slug=“building-a-django-site”)
上一篇:“我姓苏”如何分组句子?
下一篇:T和Z,哪趟火车开得更快