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<year>[0-9]{4})/(?P<name>[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 # 二级路由模块 

  • url反向解析
    当urls.py文件中的路由改变时,导致网页需要重新修改。主要原因时跳转是根据路由来实现的,当页面中的<a href="..." >写死的时候,修改页面会导致出错。

  • 本质上就是给url匹配模式起别名,然后用过别名拿到具体的URL路径

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"})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容