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路徑字符串
    • reverse傳參
      • reverse('app:name', kwargs={params:value})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM