Django新手上路——路由补充 1
1. 传递额外参数
1.1 简介
在path, re_path方法中,传递一个kwargs 的字典参数。需要给app下每个视图函数传参数时尤为有用。
1.2 使用
# 在urls.py文件的path函数中直接使用
urlpatterns = [
path('index/', views.index, kwargs = {key : value}, views.index)
]
- kwargs参数接受的数据类型为字典
- 若key与path中传递的参数重名,以key的值为主
path(‘index//’, views.index, kwargs = {‘id’ : 10})
views.index接收到的参数为10
- 若在根路由表中使用,则子路由表对应的所有视图函数均会接收到。
2. url命名
1. 重定向
项目开发中,对于一个请求不全是给与响应页面,有时需要跳转到另一个url,这就是重定向
#views.py文件中
from django.shortcuts import redirect
def login(request):
return redirect('/book/hello')
不难发现上述编码均为硬编码,不宜与代码维护,实际采用url命名方法避免。
2. 使用
2.1. 在路由表path方法中添加参数name
#文件为book/urls.py
urlpatterns = [
path('hello/', views.hello, name='hello')
]
2.2. 在需要定向的地方通过name参数值获取url
#文件为book/views.py
from django.shortcuts import reverse, redirect
def login(request):
#通过name获取url
url = reverse('hello')
#重定向
return redirect(url)
3. 注意
当不同模块子路由表中url命名相同时,reverse解析会出错,解决方法:
#子路由表中申明变量app_name
#book app的urls.py文件中: app_name = app名称
app_name= 'book' #与app名称一致
#reverse解析:reverse('app_name:url_name')
url = reverse('book:index')
东强出品,必属精品 ↩︎