(69天为作业讲解)
路由
无名分组
url(r‘^test/([0-9]{4})/([0-9]{2})‘, views.test)
- url为一个函数,第一个参数写正则表达式
- 路由从上往下匹配,一旦匹配成功就不继续向下走了
- 如果分多个组,相应的视图函数就需要用多个参数接收,个数必须一致,或者使用*args
- 在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败
- 伪静态,方便搜索引擎收录
有名分组
- url(r‘^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.test)
- 相应的视图函数中的参数名字和个数必须一致,否则会报错,位置可以颠倒
- 有名分组可以使用**kwargs接收
- 分组捕获的参数,都是str类型
- 可以可以设置默认值
路由分发
- 先导入from django.conf.urls import include
- url(r‘^app01/‘,include(‘app01.urls‘))
- 在相应的app里创建urls.py文件
- 文件中的urlpatterns不能变名字,其他写法与自带的相同
反向解析
1.路由中,命一个名,url(r‘^index/‘, views.index,name=‘n1‘)
2.在视图函数里导入from django.shortcuts import reverse
# 拿到反向解析的url
url = reverse(‘n1‘)
3.在模板里使用时:
{% url ‘n1‘ %}
4.带位置参数的反向解析
url(r‘^index/([0-9]{4})/([0-9]{2})‘, views.index,name=‘n1‘)
在视图中:url=reverse(‘n1‘,args=(2012,12,))
在模板中:{% url ‘n1‘ 2012 12 %}
5.带关键字参数反向解析
url(r‘^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.index,name=‘n1‘)
在视图中:
方法一:url=reverse(‘n1‘,args=(2012,12,)
方法二:url=reverse(‘n1‘,kwargs={‘year‘=2012,‘month‘:12})
在模板中:
方法一:{% url ‘n1‘ 2012 12 %}
方法二:{% url ‘n1‘ month=12 year=2012 %}
注意:按位置传,顺序必须是固定的
作用:修改路由中url的时候,其它地方不需要改动
名称空间
(知道它,但是建议不同app的url里name不能重名,app的名字_name)
主urls中
url(r‘^app01/‘, include(‘app01.urls‘,namespace=‘app01‘)),
url(r‘^app02/‘, include(‘app02.urls‘,namespace=‘app02‘)),
app01的urls中
urlpatterns = [
url(r‘^test‘,views.test3 ,name=‘test‘),
]
app02的urls中
urlpatterns = [
url(r‘^test02‘,views.test3 ,name=‘test‘),
]
在视图函数中:
url=reverse(‘app02:test‘)
在模板中:
<a href="{% url ‘app02:test‘ %}">点我跳到首页</a>
原文地址:https://www.cnblogs.com/luck-L/p/9585806.html
时间: 2024-10-07 17:35:39