django额外参数的传递和url命名

django额外参数的传递


path方法:path(route, view, kwargs=None, name=None)

  • path方法可以传递入一个额外参数的字典参数(kwarg),字典里的值就会被传给视图函数。
  • 传入的字典里的key必须在视图函数的参数里,否则会报错。
  • 当字典参数里的key和url捕获的参数一致时,以额外参数(kwargs)里的为准。
    1 from django.urls import path
    2 from .views import *
    3 
    4 urlpatterns = [
    5     path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    6 ]

    传入额外参数

    1 from django.shortcuts import render, HttpResponse
    2 
    3 # Create your views here.
    4 
    5 
    6 def index(request, pk, id):
    7     return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id))

    视图函数

 

          

 

     返回结果中输入的pk参数是5,但是默认的kwargs里是20,最终以额外参数里的为准。

 

url命名


 

path方法里面最后还有个name参数,默认为None,现在有以下场景:

  • 当访问莫一页面时,需要跳转到另一页面
    from django.shortcuts import render, HttpResponse, redirect
    
    # Create your views here.
    
    
    def index(request, pk, id):
        return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id))
    
    
    def show_info(request):
        return HttpResponse('<h1>hello world</h1>')
    
    
    def login(request):
        return redirect('/teacher/info')

    视图函数

    1 from django.urls import path
    2 from .views import *
    3 
    4 urlpatterns = [
    5     path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    6     path('info/', show_info),
    7     path('login/', login),
    8 ]

    路由配置

  • 利用django的redirect方法实现页面的跳转,redirect里面传入一个路径的字符串。

         

  • 当访问login的时候,直接给跳转到了info页面。
  • 假设以后info页面的路径发生了改变,当有很多页面都跳向该页面的时候,人为的手动去修改redirect里面的路径会很麻烦。这时候就要用到django的path方法提供的name参数了。
     1 from django.shortcuts import render, HttpResponse, redirect, reverse
     2 
     3 # Create your views here.
     4 
     5 
     6 def index(request, pk, id):
     7     return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id))
     8 
     9 
    10 def show_info(request):
    11     return HttpResponse('<h1>hello world</h1>')
    12 
    13 
    14 def login(request):
    15     url = reverse('info')
    16     return redirect(url)

     

    1 from django.urls import path
    2 from .views import *
    3 
    4 urlpatterns = [
    5     path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    6     path('info/', show_info, name='info'),
    7     path('login/', login),
    8 ]

     

  • 首先在需要跳转的页面的path方法里面,给该路由命名。加上name='info'。
  • 利用django提供的reverse方法,reverse方法接收一个字符串,该字符串为url的名字。该方法返回该名字的url的路径,再将这个路径重新赋予给redirect实现动态跳转。
  • 当不同的项目app里面拥有相同名称的url时,reverse函数就会发生冲突。django提供了一个app_name的变量来区分不同的app下拥有相同name的路由。
     1 from django.urls import path
     2 from .views import *
     3 
     4 app_name = 'crm'
     5 
     6 
     7 urlpatterns = [
     8     path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
     9     path('info/', show_info, name='info'),
    10     path('login/', login),
    11 ]
     1 from django.shortcuts import render, HttpResponse, redirect, reverse
     2 
     3 # Create your views here.
     4 
     5 
     6 def index(request, pk, id):
     7     return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id))
     8 
     9 
    10 def show_info(request):
    11     return HttpResponse('<h1>hello world</h1>')
    12 
    13 
    14 def login(request):
    15     url = reverse('crm:info')
    16     return redirect(url)
  • 在app目录下的路由模块(urls.py)中定一个一个app_name的变量,app_name一般为当前app的名字。
  • 在reverse函数里用写上'app名字:路由的名字'(app_name:route_name)来对拥有相同名字的url来进行区分。
    • reverse返回一个url路径字符串

转载于:https://www.cnblogs.com/ivy-blogs/p/10647643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值