您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Django-reverse与resolve函数

Django的反向解析的reverse与resolve函数实现

- reverse
 通过路由命名或可调用的视图对象来生成路由地址
 from django.shortcuts import render,reverse 引入reverse
- resolve
 通过路由地址获取路由对象的信息
 from django.urls import resolve 引入resolve
需要在reverse的基础上使用resolve

下面放例子
1、项目列表与项目的 urls.py
在这里插入图片描述
在这里插入图片描述
2、两个App的 urls.py

Index urls.py
在这里插入图片描述

User urls.py
在这里插入图片描述
3、两个App的 views.py

Index views.py

from django.shortcuts import render,reverse # 引入 reverse 
from django.http import HttpResponse


# Create your views here.
def ShowIndexHTML(request):
    kwargs = {'year':2021, 'month':6, 'day':1} # 以字典方式传递路由,如下面的 print
    args = ['2021','1','1']	# 以列表方式传递路由,如下面的 print
    
	# 此处使用的是 User中userLogin 的路由
    print(reverse('User:userLogin', kwargs=kwargs)) # print 内容具体参考以下验证结果
    print(reverse('User:userLogin', args=args))
    return HttpResponse(reverse('User:userLogin', kwargs=kwargs)) # 参数 kwargs 和 args 不可同时设置,使用namespace和name需要 User:userLogin 写

User views.py

from django.shortcuts import render,reverse # 引入reverse 
from django.http import HttpResponse
from django.urls import resolve # 引入 resolve 
# Create your views here.

def userLogin(request, year, month, day):
    args = ['1997', '9', '19'] # 以列表格式获取路由的变量信息
    result = resolve(reverse('User:userLogin',args=args)) # 先使用 reverse,再使用 resolve
    print('kwargs: ',result.kwargs) # print 内容具体参考以下验证结果
    print('url_name: ', result.url_name)
    return HttpResponse(str(year)+'-'+str(month)+'-'+str(day))

验证结果

① 访问 127.0.0.1:8000/Index/ (即ShowIndexHTML)
return HttpResponse(reverse(‘User:userLogin’, kwargs=kwargs))
返回的是 kwargs 字典的参数

在这里插入图片描述
此处 User前的 / 代表127.0.0.1:8000

② 访问 127.0.0.1:8000/User/1234/5/6 (即userLogin)
return HttpResponse(str(year)+’-’+str(month)+’-’+str(day))
返回str(year)+’-’+str(month)+’-’+str(day)

在这里插入图片描述
其中 print 的结果和具体参数

在这里插入图片描述

函数方法说明
func路由的视图函数对象或视图类对象
args以列表格式获取路由的变量信息
kwargs以字典格式获取路由的变量信息
url_name获取路由命名(name)
app_name获取项目路由函数include的参数arg的第二个元素值
app_names与app_name功能一致,但以列表格式表示
namespace获取命名空间(namespace)
namespaces与namespace功能一致,但以列表格式表示
view_name获取整个路由名称,格式:namespace:name

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进