django 路由系统

路由系统

匹配方式

1. 正则表达式的模糊匹配

2. 分组匹配 --> 相当于给视图函数传递位置参数

 

3. 分组命名匹配 --> 相当于给视图函数传递关键字参数


(两个不要混合使用) 

传参

位置传参

路由
url(r'^book1/([0-9]{2,4})/([a-zA-Z]{2})/$', views.book1),
接收
# 位置参数
def book1(request, arg1, arg2):
    print("arg1:", arg1)
    print("arg2:", arg2)
    return HttpResponse("传参成功~")

关键字传参

路由
url(r'^book2/(?P<year>[0-9]{2,4})/(?P<title>[a-zA-Z]{2})/$', views.book2),
接收
# 关键字参数
def book2(request, year, title):
    print("year:", year, type(year))
    print("title:", title)
    return HttpResponse("传参成功~")

反向解析

别名和命名空间

模板使用

                       命名空间:别名
<p>张:<a href="{% url 'car:book' 2018 'nb' %}">点我</a></p>

 路由

优先找命名空间,再找别名,
命名空间
url(r'^car/', include((app01_urls,'app01'), namespace="car"), ),
别名
url(r'^home1/', views.home, {"age": 18}, name="home"),

视图中使用

路由

路由
url(r'^car/', include((app01_urls,'app01'), namespace="car"), ),
别名
# url(r'^book/([0-9]{2,4})/([a-zA-Z]{2})/$', views.book, name="book"),
    # 关键字参数
    url(r'^book/(?P<year>[0-9]{2,4})/(?P<title>[a-zA-Z]{2})/$', views.book, name="book")  

视图

def home(request, age):
    print(age)
    # 传位置参数
    # redirect_url = reverse("car:book", args=(2018, "sb"))
    from django.urls import reverse
    # 传关键字参数
    redirect_url = reverse("car:book", kwargs={"year": 2018, "title": "sb"})
    print(redirect_url)
    # return redirect(redirect_url)

    return render(request, "test/home.html")

  

  

 其他

默认路由补充/配置

# 默认会在URL后面加上 '/',然后再去urls.py里面匹配对应关系
APPEND_SLASH = True

  

 

 

 

2. 路由系统(urls.py)  http://www.cnblogs.com/liwenzhou/p/8271147.html
        1. 正则表达式的模糊匹配
        2. 分组匹配        --> 相当于给视图函数传递位置参数
        3. 分组命名匹配    --> 相当于给视图函数传递关键字参数
            (两个不要混合使用)
            
---------------------------- 这里是坎 ------------------------------------
            
        4. 反向解析URL
            本质上就是给url匹配模式起别名,然后用过别名拿到具体的URL路径
            
            1. 怎么起别名?
                在url匹配模式中,定义name="别名"
            2. 如何使用?
                1. 在模板语言里面使用:
                    {% url "别名" %}  --> 得到具体的URL路径
                2. 在视图中如何使用:
                    from django.urls import reverse
                    
                    reverse("别名")  --> 得到具体的URL路径
            3. 如何传参数?
                1. 模板语言中:
                    {% url "别名" 2018 "nb" %}
                2. 视图函数中
                    传位置参数:
                        reverse("别名", args=(2018, "nb"))
                
                    传关键字参数:
                        reverse("别名" kwargs={"year": 2018, "title": "nb"})
            4. namespace
                为了防止不同的app下面的url匹配模式有重复的别名

 

posted @ 2019-08-06 09:45  jiuchen  阅读(121)  评论(0编辑  收藏  举报