zoukankan      html  css  js  c++  java
  • 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

        完成测试。

     

     

     

     

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

        

  • 相关阅读:
    XUartPs_SetFifoThreshold
    函数指针 与 指针函数 的 区别
    zynq SPI 参数配置
    20199118《网络攻防实践》第三周作业
    maven项目将第三方jar包打入自己的jar中
    springboot项目简单的实现操作多数据库源
    WebSocket简单的应用
    怎么使用bat脚本更改本地受保护的hosts文件
    Spring Boot配置ssl证书启用HTTPS协议
    控制animation暂停:animation-play-state
  • 原文地址:https://www.cnblogs.com/l729414559/p/15089900.html
Copyright © 2011-2022 走看看