在前面的例子里面,我们已经了解,Django里面可以通过在Project同名的那个目录下的urls.py文件里面配置路由,根据用户输入的url,调用不同的函数或者类的方法。下面看看具体的一些例子。
创新互联坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。十多年网站建设经验创新互联是成都老牌网站营销服务商,为您提供网站制作、做网站、网站设计、H5技术、网站制作、品牌网站制作、小程序设计服务,给众多知名企业提供过好品质的建站服务。单一的路由对应关系。这种方式最直接,前面已经多次出现, 可以是fbv或者cbv类型的。
url(r'^login/', views.login) url(r'^home/', views.Home.as_view()),
基于正则表达式的路由关系。具体来说,也可以分成两种:a. url(r'^detail-(\d+).html', views.detail) , 这里出现了一个分组(\d+),因此需要额外的再传递一个参数给detail这个函数,如果多个分组的话,需要按照顺序传递多个参数到detail函数b. url(r'^detail-(?P
实战模板:
url(r'^detail-(\d+)-(\d+).html', views.detail), def func(request, nid, uid): pass def func(request, *args): args = (2,9) def func(request, *args, **kwargs): args = (2,9) #-----------------------------我是分割线------------------------------------ url(r'^detail-(?P\d+)-(?P \d+).html', views.detail) def func(request, nid, uid): pass def funct(request, **kwargs): kwargs = {'nid': 1, 'uid': 3} def func(request, *args, **kwargs): args = (2,9)
给路由的映射设置名称,这样更方便调用。reverse方法可以通过name倒过来找url的路径
url.py
url(r'^asdfasdfasdf/', views.index, name='i1'), url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P\d+)/(?P \d+)/', views.index, name='i3'),
view.py
def func(request, *args, **kwargs): from django.urls import reverse url1 = reverse('i1') # asdfasdfasdf/ url2 = reverse('i2', args=(1,2,)) # yug/1/2/ url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
xxx.html
{% url "i1" %} # asdfasdfasdf/ {% url "i2" 1 2 %} # yug/1/2/ {% url "i3" pid=1 nid=9 %} # buy/1/9/
多级app目录进行分类
如果存在多个app目录,每个app目录下面都可能存在同名的函数或者url,那么这种多级的路由方式,可以通过在主url文件中配置include指向各app目录下的子url文件,然后在app各自的目录下,再配置自己的url文件。
比如:
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cmdb/', include("app01.urls")), url(r'^monitor/', include("app02.urls")), ]
url.py
urlpatterns = [ url(r'^login/', views.login), url(r'^index/', views.index), url(r'^user_info/', views.user_info), url(r'^userdetail-(?P\d+)/', views.user_detail), url(r'^userdel-(?P \d+)/', views.user_del), url(r'^useredit-(?P \d+)/', views.user_edit), url(r'^orm/', views.orm), ]
views.py
def user_info(request): if request.method == "GET": user_list = models.UserInfo.objects.all() group_list = models.UserGroup.objects.all() return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list}) elif request.method == 'POST': u = request.POST.get('user') p = request.POST.get('pwd') models.UserInfo.objects.create(username=u,password=p) return redirect('/cmdb/user_info/')
url.py
urlpatterns = [ url(r'^login/', views.login), ]
view.py
def login(request): return HttpResponse('APP02,login')
访问不同app下的效果
Url里面还可以设置默认值,比如说我们可以定义一个字典
url(r'^index/', views.index, {'name': 'root'}),
在index这个函数里面,我们就可以直接调用这个默认值
def index(request,name): print(name) return HttpResponse('OK')
最后一个是命名空间,这个和前面的多级App分类刚好是反过来的。
比如,有两个不同的Url都指向了同一个App
urls.py
/admin/ include('app01.urls',namespace='m1') /crm/ include('app01.urls',namespace='m2')
app01.urls
/index/ name = 'n1'
函数里面生成url的话,需要指定一条明确的路径
reverser('m1:n1')
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。