精华内容
下载资源
问答
  • Django反向解析

    2021-03-19 20:11:29
    Django反向解析 通过视图函数的名称来解析出视图函数的访问路由 1.用途 当视图越来越多的时候,可能会觉得之前配置的路由不够准确,如果修改配置的路由,那么之前在页面中填写的超链接的网址都需要修改,量大并且可能...

    Django反向解析

    通过视图函数的名称来解析出视图函数的访问路由

    1.用途

    当视图越来越多的时候,可能会觉得之前配置的路由不够准确,如果修改配置的路由,那么之前在页面中填写的超链接的网址都需要修改,量大并且可能漏改. 如果通过反向解析,则直接通过视图函数来定位指定的路由,只要不修改urls.py中配置的路由名称,无论路由怎么修改,都是直接解析出来修改后的路由,是动态生成路由的方法.

    2.模板中超链接的解析

    2.1配置
    • 创建项目
    django-admin startproject mysite
    cd mysite
    python manage.py startapp test_app
    
    • 配置setting.py

      1. 配置TEMPLATES : os.path.join(BASE_DIR, ‘templates’)
      2. 配置INSTALLED_APPS :“test_app”
    • 配置主从路由

      1. 主路由
      # 要配置反向解析,必须要配置namespace命名空间
      url('^test/', include("test_app.urls", namespace="test_app")),
      
      1. 子路由
      from test_app import views
      
      # 主路由中include配置了namespace,必须要配置app_name
      app_name = "test_app"
      
      urlpatterns = [
          url('^$', views.test_view1),
          # 要反向解析的url需要配置name属性
          url('^test_url$', views.test_view2, name='test2'), 
      ]
      
    • 配置views.py

      def test_view1(request):
          return render(request, "index.html")
      
      def test_view2(request):
          pass
      
    • 在templates文件夹中创建index.html

      <body>
      普通链接:<a href="/fan2/">普通fan2</a>
      <hr>
      反向解析:<a href="{%url 'test_app:test2'%}">反向解析fan2</a>
      </body>
      
    2.2演示
    • 浏览器打开http://127.0.0.1:8000/test/

      查看网页element可以看到

      <body>
      普通链接:<a href="/fan2/">普通fan2</a>
      <hr>
      反向解析:<a href="/test/test_url">反向解析fan2</a>
      </body>
      

    3.视图函数中的重定向

    重定向也可以通过反向解析定向

    3.1不使用反向解析重定向
    • 子路由添加
    url('^test_url$', views.test_view2, name='test2'),
    url('^redirect$', views.redirect_view),
    
    • views.py
    def test_view2(request):
        return HttpResponse("这是要重定向后的页面")
    
    def redirect_view(request):
        return redirect(reverse('/test/test_url'))
    

    访问http://127.0.0.1:8000/test/redirect,可以跳转到http://127.0.0.1:8000/test/test_url

    如果后来发现,’^test_url$'路由不够准确,需要修改为test_url1111

    # url('^test_url$', views.test_view2, name='test2'),
    url('^test_url1111$', views.test_view2, name='test2'),
    

    再次访问http://127.0.0.1:8000/test/redirect 会发现还是跳转到了http://127.0.0.1:8000/test/test_url

    3.2 使用反向解析重定向
    • 修改views.py
    def redirect_view(request):
        return redirect('test_app:test2')
    

    再次访问http://127.0.0.1:8000/test/redirect 就会重定向到http://127.0.0.1:8000/test/test_url1111

    4.带参数的反向解析

    • 修改urls.py
    url('^$', views.test_view1),
    url(r'^test_url(\d+)_(\d+)$', views.test_view2, name='test2'),
    
    • 修改views.py
    def test_view1(request):
        return render(request, "index.html")
    
    def test_view2(request, a, b):
        return HttpResponse(a + b)
    
    • 修改index.html
    <body>
    普通链接:<a href="/fan2/">普通fan2</a>
    <hr>
    反向解析:<a href="{%url 'test_app:test2' 2 3%}">反向解析fan2</a>
    </body>
    
    • 打开http://127.0.0.1:8000/test/ 可以看到
    <body>
    普通链接:<a href="/fan2/">普通fan2</a>
    <hr>
    反向解析:<a href="/test/test_url2_3">反向解析fan2</a>
    </body>
    

    重定向的格式传递方式为

    return redirect(reverse('test_app:test2', args=(2,3)))
    

    5.名称参数

    • 修改urls.py
    url('^$', views.test_view1),
    url(r'^test_url(?P<a>\d+)_(?P<b>\d+)$', views.test_view2, name='test2'),
    
    • 修改views.py
    def test_view1(request):
        return render(request, "index.html")
    
    def test_view2(request, a, b):
        return HttpResponse(a + b)
    
    • 修改index.html
    <body>
    普通链接:<a href="/fan2/">普通fan2</a>
    <hr>
    反向解析:<a href="{%url 'test_app:test2' a=2 b=3%}">反向解析fan2</a>
    </body>
    
    • 打开http://127.0.0.1:8000/test/ 可以看到
    <body>
    普通链接:<a href="/fan2/">普通fan2</a>
    <hr>
    反向解析:<a href="/test/test_url2_3">反向解析fan2</a>
    </body>
    

    重定向的格式传递方式为

    return redirect(reverse('test_app:test2', kwargs={'a': 2, 'b': 3}))
    
    展开全文
  • Django 反向解析

    2018-12-19 19:07:00
    Django反向解析在实际项目中应用广泛,因为其作用使得在编写路径时不用在输入类似于’/user/login’这种形式,而且有时这类写法还容易出错。 模板中反向解析的模板语言写法以及需要设置的参数。(笔者使用的为Django...

    Django学习第十二天

    Django反向解析在实际项目中应用广泛,因为其作用使得在编写路径时不用在输入类似于’/user/login’这种形式,而且有时这类写法还容易出错。
    模板中反向解析的模板语言写法以及需要设置的参数。(笔者使用的为Django2.1.2版本,与Django1.8.x版本略有不同)
    user/urls.py

    from django.urls import re_path
    app_name = 'user'
    urlpatterns = [
        re_path(r'register',RegisterView.as_view(),name='register'),#注册
        re_path(r'repassword',RePasswordView.as_view(),name='repassword'),#修改密码
        re_path(r'active/(.+)',ActiveView.as_view(),name = 'active'),#激活
        re_path(r'^login$',LoginView.as_view(),name = 'login'),#登录
    ]
    

    django项目同名文件夹下的urls.py

    from django.contrib import admin
    import apps.user.urls
    import apps.cars.urls
    from django.urls import re_path
    from django.conf.urls import url,include
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^user/', include(apps.user.urls,'user')),
    ]
    

    模板中使用

    <a href="{% url 'user:register' %}">注册</a>
    

    通过反向解析向后端传参

    <a href="{% url 'user:active' 123456 %}"></a>
    

    笔者目前才刚刚开始django的学习,如有错误之处,请大牛见谅指出

    转载于:https://www.cnblogs.com/big-cabbage/p/10300366.html

    展开全文
  • django 反向解析

    2019-10-04 17:58:02
    反向解析: 当某一个url配置的地址发生变化时,页面上使用反向解析生成地址的位置不需要发生变化。 比如:我们在视图函数中定义的index视图函数为如下: def index(request): return render(request, 'booktest/...

    反向解析: 当某一个url配置的地址发生变化时,页面上使用反向解析生成地址的位置不需要发生变化。

    比如:我们在视图函数中定义的index视图函数为如下:

    def index(request):
        return render(request, 'booktest/index.html')
    

    我们的urls.py路由文件定义如下:

    url(r'^index$', views.index),
    

    现在是可以访问的,但是问题来了,如果我们想换首页的函数为如下:

    url(r'^index22$', views.index),
    

    这样的话,就没办法匹配了,如果还想让视图函数中的index函数进行匹配上的话,那么可以用到反向解析这个方法。

    1、 首先现在项目中的urls.py中定义我们应用booktest的路由url(r'^', include('booktest.urls', namespace='booktest')),,加上namespace='booktest'

    2、然后在应用中的urls.py中定义我们路由url(r'^index22$', views.index, name='index'),,加上name='index' 就可以进行匹配了。

    3、在模板文件中也要有相应的变化,index模板文件修改为如下:

    反向url解析:index<br>
    <a href="{% url 'booktest:index' %}">index</a><br>
    

    在模板文件中使用时,格式如下:
    {% url 'namespace的名字:视图函数名' %}
    例如{% url 'booktest:fan2'%}


    带位置参数{% url 'namespace的名字:name' 参数 %}
    例如{% url 'booktest:show_args' 1 2 %}

    路由文件定义如下:

        url(r'^show_args/(\d+)/(\d+)', views.show_args, name='show_args'),
    

    视图函数定义如下:

    def show_args(request, a, b):
        return HttpResponse(a + ":" + b)
    

    模板文件定义如下:

    动态url反向解析:可变位置参数show_args<br>
    <a href="{% url 'booktest:show_args' 1 2 %}">show_args</a><br>
    

    带关键字参数{% url 'namespace的名字:name' 关键字参数 %}
    例如{% url 'booktest:show_kwargs' c=3 d=4 %}

    路由文件定义如下:

        url(r'^show_kwargs/(?P<c>\d+)/(?P<d>\d+)$', views.show_kwargs, name='show_kwargs')
    

    视图函数定义如下:

    def show_kwargs(request, c, d):
        return HttpResponse(c + ":" + d)
    

    模板文件定义如下:

    动态url反向解析:可变位置参数show_kwargs<br>
    <a href="{% url 'booktest:show_kwargs' c=3 d=4 %}">show_kwargs</a><br>
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 681
精华内容 272
关键字:

django反向解析