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)

命名空间路由分发:

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")),
]
View Code

对应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/

 

 
posted @ 2018-01-10 14:39  雷大侠!  阅读(163)  评论(0编辑  收藏  举报