Python Web开发33-django 模板-反向解析
时间:2023-06-11 16:30:01 | 来源:网站运营
时间:2023-06-11 16:30:01 来源:网站运营
Python Web开发33-django 模板-反向解析:
因篇幅太多了,往期整理的32篇资料在最后哦
反向解析
先看看原来怎么做
- 打开booktest/views.py文件,创建视图fan1、fan2
def fan1(request): return render(request,'booktest/fan1.html') def fan2(request): return HttpResponse('fan2')
- 打开booktest/urls.py文件,配置url
url(r'^fan1/$', views.fan1), url(r'^fan2/$', views.fan2),
- 在templates/booktest/目录下创建fan1.html
<html> <head> <title>反向解析</title> </head> <body> 普通链接:<a href="/fan2/">fan2</a> </body> </html>
http://127.0.0.1:8000/fan1/- 打开booktest/urls.py文件,修改”fan2“的正则表达式为”fan_show“
url(r'^fan_show/$', views.fan2),
- 打开浏览器,后退一下,刷新后再次点击链接,浏览如下图
- 问题就来了:随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正同表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗?
- 答:反射解析
- 应用解析应用在两个地方:模板中的超链接,视图中的重定向
反向解析
- 要实现反射解析功能,需要如下步骤:
- 1.在test4/urls.py中为include定义namespace属性
url(r'^',include('booktest.urls',namespace='booktest')),
- 2.在booktest/urls.py中为url定义name属性,并修改为fan2
url(r'^fan2/$', views.fan2,name='fan2'),
- 3.在模板中使用url标签做超链接,此处为templates/booktest/fan1.html文件
<html> <head> <title>反向解析</title> </head> <body> 普通链接:<a href="/fan2/">fan2</a> <hr> 反向解析:<a href="{%url 'booktest:fan2'%}">fan2</a> </body> </html>
- 回到浏览器中,后退,刷新,查看源文件如下图,两个链接地址一样
- 2.在booktest/urls.py中,将fan2修改为fan_show
url(r'^fan_show/$', views.fan2,name='fan2'),
- 回到浏览器中,刷新,查看源文件如下图,两个链接地址不一样
from django.shortcuts import redirect from django.core.urlresolvers import reverse return redirect(reverse('booktest:fan2'))
- 总结:在定义url时,需要为include定义namespace属性,为url定义name属性,使用时,在模板中使用url标签,在视图中使用serverse函数,根据正则表达式动态生成地址,减轻后期维护成本。但是总得来说这个功能有些鸡肋,实用性并不大。
URL的参数
- 有些正则表达式中是有参数的,接下来讲解如何传递参数
- 情况一:位置参数
- 在booktest/urls.py中,修改fan2如下
url(r'^fan(/d+)_(/d+)/$', views.fan2,name='fan2'),
- 修改templates/booktest/fan1.html文件如下
<html> <head> <title>反向解析</title> </head> <body> 普通链接:<a href="/fan2_3/">fan2</a> <hr> 反向解析:<a href="{%url 'booktest:fan2' 2 3%}">fan2</a> </body> </html>
return redirect(reverse('booktest:fan', args=(2,3)))
- 情况二:关键字参数
- 在booktest/urls.py中,修改fan2如下
url(r'^fan(?P<id>/d+)_(?P<age>/d+)/$', views.fan2,name='fan2'),
- 修改templates/booktest/fan1.html文件如下
<html> <head> <title>反向解析</title> </head> <body> 普通链接:<a href="/fan100_18/">fan2</a> <hr> 反向解析:<a href="{%url 'booktest:fan2' id=100 age=18%}">fan2</a> </body> </html>
return redirect(reverse('booktest:fan', kwargs={'id':100,'age':18}))
往期文章整理:
01-四喜Clion:Python Web开发-django搭建环境
02-四喜Clion:Python Web开发02-django创建图书管理项目
03-四喜Clion:Python Web开发03-django模型设计
04-四喜Clion:Python Web开发04-django后台管理
05-四喜Clion:Python Web开发05-django视图
06-四喜Clion:Python Web开发06-django模板
07-四喜Clion:Python Web开发07-django项目完成
08-四喜Clion:Python Web开发08-django ORM简介
09-四喜Clion:Python Web开发09-django ORM-定义模型类
10-四喜Clion:Python Web开发10-django ORM-模型成员
11-四喜Clion:Python Web开发11-django ORM-查询集
12-四喜Clion:Python Web开发12-django ORM-条件查询
13-四喜Clion:Python Web开发13-django ORM-关联的查询
14-四喜Clion:Python Web开发14-django 视图
15-四喜Clion:Python Web开发15-django 视图-URLconf
16-四喜Clion:Python Web开发16-django 视图-内置错误视图
17-四喜Clion:Python Web开发17-django 视图-HttpReqeust对象
18-四喜Clion:Python Web开发18-django 视图-QueryDict对象、GET属性、POST属性
19-四喜Clion:Python Web开发19-django 视图HttpResponse对象
20-四喜Clion:Python Web开发20-django 视图 子类JsonResponse
21-四喜Clion:Python Web开发21-django 视图 子类HttpResponseRedirect
22-四喜Clion:Python Web开发22-django 视图-状态保持
23-四喜Clion:Python Web开发23-django 模板
24-四喜Clion:Python Web开发24-django 模板语言-变量
25-四喜Clion:Python Web开发25-django 模板语言-标签
26-四喜Clion:Python Web开发26-django 模板语言-过滤器
27-四喜Clion:Python Web开发27-django 模板语言-自定义过滤器
28-四喜Clion:Python Web开发28-django 模板语言-注释
29-四喜Clion:Python Web开发29-django 模板-模板继承
30-四喜Clion:Python Web开发30-django 模板-HTML转义
31-四喜Clion:Python Web开发31-django 模板-CSRF
32-四喜Clion:Python Web开发32-django 模板-验证码
视频教程这里有
下期整理 django 视图 点击@四喜Clion一起python到底~