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"})