django 额外参数的传递
path 方法: path(route, view, kwargs=None, name=None)
path 方法可以传递入一个额外参数的字典参数(kwarg), 字典里的值就会被传给视图函数.
传入的字典里的 key 必须在视图函数的参数里, 否则会报错.
当字典参数里的 key 和 url 捕获的参数一致时, 以额外参数 (kwargs) 里的为准.
- from django.urls import path
- from .views import *
- urlpatterns = [
- path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
- ]
传入额外参数
- from django.shortcuts import render, HttpResponse
- # Create your views here.
- def index(request, pk, id):
- 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')
视图函数
- from django.urls import path
- from .views import *
- urlpatterns = [
- path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
- path('info/', show_info),
- path('login/', login),
- ]
路由配置
利用 django 的 redirect 方法实现页面的跳转, redirect 里面传入一个路径的字符串.
当访问 login 的时候, 直接给跳转到了 info 页面.
假设以后 info 页面的路径发生了改变, 当有很多页面都跳向该页面的时候, 人为的手动去修改 redirect 里面的路径会很麻烦. 这时候就要用到 django 的 path 方法提供的 name 参数了.
- from django.shortcuts import render, HttpResponse, redirect, reverse
- # 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):
- url = reverse('info')
- return redirect(url)
- from django.urls import path
- from .views import *
- urlpatterns = [
- path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
- path('info/', show_info, name='info'),
- path('login/', login),
- ]
首先在需要跳转的页面的 path 方法里面, 给该路由命名. 加上 name='info'.
利用 django 提供的 reverse 方法, reverse 方法接收一个字符串, 该字符串为 url 的名字. 该方法返回该名字的 url 的路径, 再将这个路径重新赋予给 redirect 实现动态跳转.
来源: http://www.bubuko.com/infodetail-3009563.html