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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值