1 2 3

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

    完成测试。

 

 

 

 

如有错误欢迎大家指正,共同学习成长^_^

    

posted @ 2021-08-02 14:55  矜持小蝌蚪  阅读(145)  评论(0编辑  收藏  举报
levels of contents