pyton路由层解析
路由正则匹配
路由层
url.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
#()小括号代表,里面的参数作为形参传递给视图层的函数,views.py需要加上一个形参,[0-9]{3}代表匹配三位数字。
url(r'^test/([0-9]{3}$)',views.test),
url(r'^testadd/$',views.testadd), #^匹配首,dollor匹配尾。
url(r'^$',views.home), # 匹配空,匹配首页
url(r'',views.error) # 匹配404notfound
]
]
下图演示的即无名分组
views.py
网页显示结果:
有名分组
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test3/(?P<year>\d+)/(?P<month>\d+)',views.test3),
views.py
注意,这里的形参必须为ulrs.py中所规定的,这里urls.py中规定形参为year,那么这里test3的形参必须为year.month也必须相对应month
def test3(request,year,month):
return HttpResponse(year+month)
注释:有名分组和无名分组支持多个相同类型的传参,但是不支持混用。
反向解析:
步骤一:在urls.py
中给需要反向解析的一个路径一个name,这里设定为add。
注释:前端解析和后端解析没有实质性关联。
后端解析:通过reverse
函数
def test(request):
res = reverse('add') #获取重命名url的真实地址
print(res)
return render(request,'test.html')
>>> res = 'add'
前端解析
<a href="{% url 'add' % }">add</a>
带参解析:
views.py路由层
def publish(request):
#重定向的反向解析
#传递参数的两种方式,前者无名分组有参,后者有名有参(亦可用元祖传参)。
# url = reverse('ddd',args=(2018,12))
# url = reverse('ddd',kwargs={'month':12,'year':2018})
# print(url)
# return redirect(url)
# 通过前端点击方式
return render(request,'publish.html')
def publishadd(request,year,month):
return HttpResponse('publishadd'+year+month)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^publish/$',views.publish),
url(r'^publish13/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.publishadd,name='ddd')
html
<a href="{% url 'ddd' 2018 12 %}">点我 </a>
{#必须在反向生成的时候传递给urls,不然不知道是什么数字,用于确定URL的具体信息#}
最终效果:url地址栏中输入127.0.0.1/publish 跳转到127.0.0.1/publish/2018/12/
或点击前端网页跳转到127.0.0.1/publish/2018/12