码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-04-03 12:18:58      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:code   att   函数的参数   就会   reverse   orm   rect   路由   .com   

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来进行区分。

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

标签:code   att   函数的参数   就会   reverse   orm   rect   路由   .com   

原文地址:https://www.cnblogs.com/ivy-blogs/p/10647643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!