zoukankan      html  css  js  c++  java
  • Django 正向解析与反向解析

    正向解析就是按照顺序查找访问(urls.py---view--templates)

    反向解析就是根据命名空间命名来调到指定的页面

    用反向解析的原因:

    随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗? 就是用反向解析的办法。

    应用范围:模板中的超链接 、视图中的重定向

    使用方法:

    • 定义url时,需要为include定义namespace属性,为url定义name属性
    • 使用时,在模板中使用url标签,在视图中使用reverse函数,根据正则表达式动态生成地址,减轻后期维护成本。

    1,创建urls

    from django.urls import path,include,re_path
    from myapp.d2_views import Index
    from myapp.d3_views import Avgage
    from django.views.generic import TemplateView
    from myapp.d11_view import Test,Testrev,TestrevDict
    
    #声明命名空间
    app_name = 'myapp'
    
    urlpatterns = [
        path('',TemplateView.as_view(template_name='index.html')),
        path("avgage",Avgage.as_view()),
        path("test",Test.as_view()),
        #反向解析 第二个参数,制定命名
        re_path("^test_rev_(.+?)$",Testrev.as_view(),name="test_name"),
        #kwargs
        re_path("^test_dict_(?P<username>.+?)$",TestrevDict.as_view(),name="test_name_dict")
    ]

    2,创建templates(index.html)

    <a href="test">正向解析</a>
        {# 第一个参数命名空间 第二个自定义命名 456表示需要传递的参数#}
        <a href="{% url 'myapp:test_name' 456 %}">反向解析</a>
        <a href="{% url 'myapp:test_name_dict' username=55 %}">反向解析(kwargs)</a>

    3,创建视图(views.py)

    from django.http import HttpResponse,HttpResponseRedirect
    from django.views import View
    from myapp.models import Student
    from django.shortcuts import redirect,render
    #导入方向解析方法
    from django.urls import reverse
    
    #定义类视图
    class Test(View):
        def get(self,request):
            # 第一个参数命名空间 第二个自定义命名 
            return redirect(reverse('myapp:test_name_dict',kwargs={'username':66}))
            return redirect(reverse('myapp:test_name',args=(789,)))
            return HttpResponseRedirect(reverse('myapp:test_name'))
            return HttpResponse('正向解析')
    
    #定义反向解析方法
    class Testrev(View):
        def get(self,request,p1):
            print(p1)
            return HttpResponse('反向解析')
  • 相关阅读:
    LDAP
    开源实时日志分析ELK平台部署
    js上传并且预览图片
    python logging的应用
    使用QQ第三方登录 并在父页面跳转刷新
    ubuntu sudo不能用的解决办法
    ubuntu 16.10安装nginx
    crontab 切割日志
    nginx的日志切割
    python对excel文件的读写操作
  • 原文地址:https://www.cnblogs.com/xcsg/p/10529548.html
Copyright © 2011-2022 走看看