1.路由分发:用于大项目,大项目分为很多小项目:app01,app02......
http://127.0.0.1:8000/app01/index/
urls.py
from django.contrib import admin
from django.urls import path,include #记得导入include
urlpatterns = [
# path('admin/', admin.site.urls),
path('app01/', include('app01.urls')),#匹配http://127.0.0.1:8000/app01/index/中的app01
path('app02/', include('app02.urls')),
path('app03/', include('app03.urls')),
]
app01文件夹的urls.py
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('index/', views.index),#匹配http://127.0.0.1:8000/app01/index/中的index
path('add/', views.add),
]
app02文件夹的urls.py
...
2.动态路由:
path不可以使用正则表达式,而re_path和url可以。
2.1 re_path
#网页http://127.0.0.1:8000/index/fasdf7/8985eu.html
from django.urls import path,re_path
urlpatterns = [
#以index开头,以html结束,w+是匹配字母数字下划线
re_path('^index/(\w+)/(\w+).html$',index),
]
位置参数:'^index/(\w+)/(\w+).html$' 前面的w+传给a1,后面的w+传给a2,按顺序传参。
def index(request,a1,a2):
return HttpResponse('abc')
关键字参数:'^index/(?P<a1>\w+)/(?P<a2>\w+).html$' 前面的w+传给a1,后面的w+传给a2,按关键字传参。
def index(request,a1,a2):
return HttpResponse('abc')
2.2 url 用法跟re_path一样,可参考上面代码。
from django.conf.urls import url
urlpatterns = [
url('^index/(\w+)/(\w+).html$',index),
]
3.伪静态
re_path('^index/(\w+)/(\w+).html$',index),
静态网站:内容固定,不用到数据库里面获取数据就直接返回html,访问速度比较快。
url路径最后添加html就是伪静态,实际上很多网站(服务器)都是从数据库中获取数据的,
而最后添加html为了提高seo排名,优化搜索。
4.根据名称反向生成url,用于设置权限。
4.1 设置位置参数
urlpatterns = [
re_path('^index/(\w+)/(\w+).html$',index,name='ind'),#name='ind'是名称
]
def index(request,a1,a2):
#v = reverse('ind',a1,a2)是获取url
v = reverse('ind',args=('abc','def'))#设置参数,args是元祖,a1对应abc,a2对应def
print(v) # /index/abc/def.html
return HttpResponse('abc')
4.2 设置关键字参数
urlpatterns = [
re_path('^index/(?P<a1>\w+)/(?P<a2>\w+).html$',index,name='ind'),
]
def index(request,a1,a2):
v = reverse('ind',kwargs={'a1':'abc','a2':'def'})#设置参数
print(v) # /index/abc/def.html
return HttpResponse('abc')
4.3 模板替换
urlpatterns = [
re_path('^index/(?P<a1>\w+)/(?P<a2>\w+).html$',index,name='ind'),
]
def index(request,a1,a2):
return render(request,'index.html',{'a1':a1,'a2':a2})
index.html里的特殊字符 {% url 'ind' a1 a2 %}
输入
http://127.0.0.1:8000/index/111/222.html
返回
/app01/index/111/222.html
可以在函数里面利用reverse反向生成url,然后放在列表里面,
最后把这个列表替换到模板里面进行for循环拿到所有url返回给浏览器。