Django-路由
路由:
1、url(r'^index/', views.index), url(r'^home/', views.Home.as_view()), 2、url(r'^detail-(\d+).html', views.detail), 3、url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail) PS: def detail(request, *args,**kwargs): pass 实战: a. 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) b. url(r'^detail-(?P<nid>\d+)-(?P<uid>\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)
命名空间路由分发:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^cmdb/', include("app01.urls")), url(r'^monitor/', include("app02.urls")), ]
对应app01下的urls:
urlpatterns = [ url(r'^login/', views.login), url(r'^index/', views.index), url(r'^user_info/', views.user_info), url(r'^userdetail-(?P<nid>\d+)/', views.user_detail), url(r'^userdel-(?P<nid>\d+)/', views.user_del), url(r'^useredit-(?P<nid>\d+)/', views.user_edit), url(r'^orm/', views.orm), ]
下面看看渲染前后的效果:以
rl(r'^userdel-(?P<nid>\d+)/', views.user_del)为例:
<h3>用户列表</h3> <ul> {% for row in user_list %} <li> <a href="/cmdb/userdetail-{{ row.id }}/">{{ row.username }}</a> | <a href="/cmdb/userdel-{{ row.id }}/">删除</a> | <a href="/cmdb/useredit-{{ row.id }}/">编辑</a> </li> {% endfor %} </ul>
渲染后:(里面存了三条数据)
<h3>用户列表</h3> <ul> <li> <a href="/cmdb/userdetail-14/">2</a> | <a href="/cmdb/userdel-14/">删除</a> | <a href="/cmdb/useredit-14/">编辑</a> </li> <li> <a href="/cmdb/userdetail-15/">3</a> | <a href="/cmdb/userdel-15/">删除</a> | <a href="/cmdb/useredit-15/">编辑</a> </li> <li> <a href="/cmdb/userdetail-16/">4</a> | <a href="/cmdb/userdel-16/">删除</a> | <a href="/cmdb/useredit-16/">编辑</a> </li> </ul>
下一步去urls匹配view里面的对应执行函数,并且接受传来的参数值:
def user_detail(request, nid): obj = models.UserInfo.objects.filter(id=nid).first() # 去单挑数据,如果不存在,直接报错 # models.UserInfo.objects.get(id=nid) return render(request, 'user_detail.html', {'obj': obj})
html访问方式:
<a class="menu" href="/cmdb/user_info/">用户管理</a>
另一种 name 生成URL:
/detail/ name='a1' -> include("app01.urls") - 视图中:reverse - 模板中:{% url "a1" %}
其他方式:
对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL ***** url(r'^asdfasdfasdf/', views.index, name='i1'), url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'), 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/