Django反正解析路由

首先要了解为什么要定义反响解析

  因为随着功能的增加会出先非常多的视图和对应的路由,有可能项目的一些需要一些模板需要重写路由,或之前配置的正则表达式不够准确,于是就要修改正则表达式,但是路由或正则表达式一旦进行修改,之前对应其的超链接都要进行修改这是一个非常麻烦的事情,路由过多的话更改过程会有一些被忘记更改,这里就反向解析的作用就起到了。

使用范围

  模板超链接

  视图方法重定向

使用方法

首先要在路由urls.py文件内声明命名空间

#声明明名空间 app_name为固定的后面可以自己定义因为后续用频率非常频繁所有建议大家用子模块项目名称命名
app_name = 'myapp'

下面设置路由先看第一种

路由文件

urlpatterns = [
    path('',TemplateView.as_view(template_name='index.html')),
    #反向解析 ()内为匹配参数不需要的话也可以不加               name参数指定声明的命名
    re_path('^test_rev_(.+?)$',TestRev.as_view(),name='test_name')

]

视图类 设置完成即可进入相应的视图方法进行重定向

#导入类视图 
from django.views import View
#导入反响解析方法
from django.urls import reverse

#定义类视图
class Test(View):
    
    def get(self,request):

        #第一个是命名空间 值为个是路由命名 使用第二个来控制参数 注意参数要为tuple所有一个元素是也要加逗号 如果路由方法没有设置参数args可以去掉
        return redirect(reverse('myapp:test_name',args=(456,)))

模板 超连接跳转

{# url为固定写法   第一个参数应用名称  对应的值为参数自定义命名  123为参数#}
    <a href="{% url 'myapp:test_name' 123 %}">反响解析</a> 

第二种方法指定参数进行传参

路由文件

urlpatterns = [
    path('',TemplateView.as_view(template_name='index.html')),
    #反响解析 keyargs  使用参数指定<>内为key 其后为要匹配的value        参数指定命名
    re_path('^test_dict_(?P<username>.+?)$',TestRevDict.as_view(),name='test_name_dict'),
]

类视图重定向

#定义类视图
class Test(View):
    
    def get(self,request):
        #跟上一个一样第一个是命名空间 值为个是路由命名 使用第二个来控制参数这样的参数要用kwargs来指定传参
        return redirect(reverse('myapp:test_name_dict',kwargs=({'username':'qewq'})))
    

模板 超连接跳转

{# 第一个参数应用名称  值为参数自定义命名  参数要进行指定 #}
<a href="{% url 'myapp:test_name_dict' username='jack' %}">反响解析(keyargs)</a>

 在写好相应的视图方法接收相应参数即可

#定义接口返回数据
class ReturnText(View):
    def post(self,request):
        #接收参数
        username = request.POST.get('username','未收到')
        return HttpResponse('接收到的是'+username)

  

原文地址:https://www.cnblogs.com/Niuxingyu/p/10531595.html