【发布时间】:2020-01-04 09:03:31
【问题描述】:
如果我想通过 URL 路径将多个变量传递给视图,以便我可以使用它来查找 多个 对象,我有几种不同的方法可以做到这一点:
1.在 URL 路径中作为关键字参数传递
我可以在 FBV 和 CBV 中通过 url 路径将参数作为 kwarg 传递:
// Function based view:
path('task/detail/<int:pk>/<int:abc>/', views.task_detail, name='task_detail')`
// Class based view:
path('task/detail/<int:pk>/<int:abc>/', views.TaskDetailView.as_view()
在 URL 中作为 mysite.com/task/detail/1/2/ 传递。
在 FBV 中,我可以同时访问 kwargs 以通过 request 获取单独的对象:
// Function based view:
def task_detail(request, pk, abc)
first_object = get_object_or_404(FirstObjectModel, id=pk)
second_object = get_object_or_404(SecondObjectModel, id=abc)
2。在 URL 路径中作为查询字符串传递
或者,我可以通过查询字符串传递参数,该字符串被解析,参数存储为request.GET 中的QueryDict,例如mysite.com/task/detail/?pk=1&abc=2。
然后我可以通过 FBV 和 CBV 访问这些:
// Function based view:
def task_detail(request):
first_object_id = request.GET.get('pk')
second_object_id = request.GET.get('abc')
first_object = get_object_or_404(FirstObjectModel, id=pk)
second_object = get_object_or_404(SecondObjectModel, id=abc)
与这些方法中的每一种方法等效的分类基本视图是什么?为什么以及何时应该使用kwargs 而不是query strings?
【问题讨论】:
标签: django django-views