多级url虽然可以在多个app的时候将各个应用进行归类。现在有这么一种情况,就是app01里面的views.py里面定义了大量的函数。这样的话我们势必要在app01的urls.py里也要根据函数的数量编辑绑定信息。一个函数一条绑定的信息的对应写下去。为了避免这种可怕的事情,我们就需要使用动态url来处理这种请求。所谓的动态url就是可以通过正则表达式匹配用户输入的url内容,将url当做参数传递给后端的python函数进行处理。
首先我们在app01应用的views.py文件里新建一个函数dynamic_url()用于将接接收到的url内容进行拼接
/app01/views.py
from django.shortcuts import render from django.shortcuts import HttpResponse # Create your views here. def dynamic_url(request,arg1,arg2): return HttpResponse(arg1+arg2)
修改mydjango目录下的urls.py,用正则表达式编辑匹配app01这个以后的匹配规则
/mydjango/urls.py
#!/usr/bin/env python # coding:utf-8 from django.conf.urls import url,include from django.contrib import admin #记得导入app01 from app01 import views urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^app01/‘, include(‘app01.urls‘)), url(r‘^app02/‘, include(‘app02.urls‘)), #括号里的内容就是传给dynamic_url的参数,这里表示匹配两个任意数字,并把数字传给函数 url(r‘^dynamic_url/(\d+)/(\d+)$‘, views.dynamic_url), #匹配所有url的规则一定要放在最后 url(r‘^‘, include(‘app01.urls‘)), ]
注意括号里的内容是以按先后顺序传递给python函数的
下面我们测试一下效果
如上图所致。我们url里面最后的两个数被以参数的形式传入了函数并打印到页面上了。
如果我们对参数传递的顺序有特殊的要求,以往以字典的形式匹配的内容具体对应某个参数我们可以在urls.py文件里匹配url的时候使用?P<arg>关键字来实现,下面我们只修改urls.py就可以了
/mydjango/urls.py
#!/usr/bin/env python # coding:utf-8 from django.conf.urls import url,include from django.contrib import admin #记得导入app01 from app01 import views urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^app01/‘, include(‘app01.urls‘)), url(r‘^app02/‘, include(‘app02.urls‘)), # url(r‘^dynamic_url/(\d+)/(\d+)$‘, views.dynamic_url), #指定第一个变量传递给函数的arg2参数,第二个变量传递给arg1参数 url(r‘^dynamic_url/(?P<arg2>\d+)/(?P<arg1>\d+)$‘, views.dynamic_url), #匹配所有url的规则一定要放在最后 url(r‘^‘, include(‘app01.urls‘)), ]
再次刷新刚才的url
在url必变的情况,参数传递的顺序已经改变了。这就是动态url。
时间: 2024-10-30 00:38:58