Django反向解析(上)
一 反向解析的作用:
在Django项目中,经常需要获取对象的URL,为生成的内容配置URL地址,例如在html模板中需要写上<a>标签中的跳转地址等等。
这时候,如果某个地址在urls路由配置中发生了变化,那么所有的与之相关的URL地址都要重新替换一次,这将非常麻烦,下面我们可以用反向解析的方式在避免这种问题。
二 我们直接以示例展示:
2.1 这是我的代码结构(新建了两个applications: app01/app02,具体建立配置命令就不贴上来了^_^!)
2.2 在主配置文件中配置urls路由信息(引入了两个我们新建的app01和02)
2.3 在app01和app2的urls中分别配置测试用的urls
app01/urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
# re_path('(0-9){2}/$', views.test, name="app_01"),
re_path('test/$', views.test, name="app_01"),
]
app02/urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
re_path('test/([0-9]{2})/$', views.test, name="app_02"), #匹配test/(参数为:0到9的数字,要求2个), 匹配后交给vivews.test函数处理, 给当前匹配URL定义一个别名("app_02")
]
2.4 配置app01和app02的视图views.py配置
app01/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
# Create your views here.
def test(request):
return render(request,'test.html') #返回一个模板页面"test.html"给客户端页面.
app02/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def test(request,arg):
if request.method == 'GET':
print("传值为:%s"%arg) #在控制台打印一下传入的参数
return HttpResponse("app2 is loads") #返回字符串"app2 is loads"给客户端页面,表示跳转成功。
2.5 配置模板文件
创建模板文件:/statics/test.html
注意:需要先在settings.py配置文件,配置好静态文件目录地址,我们配置的静态文件路径为,项目根目录下的/statics
test.html 内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test direct test</title>
</head>
<body>
<p><a href="{% url 'app_02' 12 %}">跳转到app2</a></p> <!-- url '变量名' (传参,如果视图函数没有参数那么也可以忽略,这里给一个默认参12) -->
</body>
</html>
三 启动项目,测试:
3.1 在命令行中启动项目测试
python manage.py runserver 0.0.0.0:8000
3.2 打开URL 地址,我们看到有两个app的匹配路径
3.3 我们输入app01/test/
这里显示了app01//vives.py视图中test函数定义的返回值
3.4 我们点击“跳转到app02”,发现已经跳转到了app02
四 修改URL,在测试跳转
上面我们已经成功展示了利用name别名在模板中引用URL地址,下面我们修改一下URL地址,看看name别名是否能自动识别到。
4.1 修改app02/urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
re_path('test111/([0-9]{2})/$', views.test, name="app_02"), #将匹配test修改成匹配test111/,
]
4.2 重新加载app01的URL
4.2.1 鼠标放入跳转URL处,不要点击,我们看到URL地址已经动态变更为app02/test111 (这里证明地址已经动态修改了)
4.2.2 然后我们在点击跳转字符
4.2.3 成功跳转到新的URL地址
演示结束。
五 反向解析在视图代码中的使用
5.1 编辑app1的视图代码 app01/views.py
from django.http import HttpResponseRedirect
from django.urls import reverse
def test(request):
# return render(request,'test.html')
return HttpResponseRedirect(reverse("app_02",args=(11,))) #利用HttpResponseRedirect跳转到reverse解析的'name' URL地址。
5.2 浏览器输入app1的URL:localhost:8000/app01/test/
浏览器会自动跳转到app2的URL
完成测试。
如有错误欢迎大家指正,共同学习成长^_^