Django路由

  • urls.py
    参考内容 http://www.cnblogs.com/liwenzhou/p/8271147.html
    后台根据urls.py文件的正则表达式来拆分对应的目录。

  • 基本格式

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]

* 正则表达式:一个正则表达式字符串
* views视图函数:一个可调用对象,通常为一个视图函数或一个指定* * 视图函数路径的字符串
* 参数:可选的要传递给视图函数的默认参数(字典形式)
* 别名:一个可选的name参数
  • 分组匹配
url(r'^canshu/([0-9]{4})/([0-9]{2})/$', views.canshu)

# 未知参数
def canshu(request, arg1, arg2):
    print arg1  # 9999
    print arg2   #33
    return HttpResponse("ok")
  • 分组命名匹配
url(r'^canshu/(?P[0-9]{4})/(?P[a-zA-Z]{2})/$', views.canshu)

def canshu(request, year, name):
    print year  # 9999
    print name   #33
    return HttpResponse("ok")

注意:分组匹配和分组命名匹配两种方式不能混用


  • 多个app分流
    默认新建的app下面是没有路由模块urls.py,但是当网站结构增大的时候,我们需要将流量分开,即在每个应用下新建自己的路由模块。
工程/urls.py
from app01 import urls
url(r'^app01/', include(urls))

app01/urls.py # 二级路由模块 

1. 怎么起别名?
    在url匹配模式中,定义name="别名"
2. 如何使用?
  1. 在模板语言里面使用:
    {% url "别名" %}    => 得到具体的URL路径
  2. 在视图中如何使用:
    from django.urls import reverse
    reverse(name)   => 得到具体的URL路径
  3. 如何传参数?
    1. 模板语言中:
      {% url "别名" 2018 "nb" %}
    2. 视图函数中
      传位置参数:reverse("别名", args=(2018, "nb"))
      传关键字参数:reverse("别名" kwargs={"year": 2018, "title": "nb"})

你可能感兴趣的:(Django路由)