urls.py
url(r'^customer/(?P<name>[^\s]+)/$', customerDetailView.as_view(), name="customerDetailView"), #pass 'name' variable
和
views.py
class customerDetailView(DetailView):
context_object_name = 'customerDetail'
template_name = "customer.html"
allow_empty = True
def __init__(self, name=None, *args):
self.name = name # name is 'None'... Why...?
def get_queryset(self):
return Customer.objects.get(name=self.name)
我只是要求'192.168.1.5/customer/abc/',但'name'是没有......
如何收到'姓名'?我该怎么办?
编辑 - - -
views.py
class customerDetailView(DetailView):
context_object_name = 'customerDetail'
template_name = "customer.html"
allow_empty = True
"""
def __init__(self, **kwargs):
import pdb;pdb.set_trace()
self.name = kwargs['name']
"""
def get_queryset(self):
# import pdb;pdb.set_trace()
self.name = self.kwargs['name'] # Thanks Kay Zhu!!
return Customer.objects.get(name=self.name)
我申请你回答的代码 .
然后,我收到一个错误
Generic detail view customerDetailView must be called with either an object pk or a slug.
所以我需要'pk'......
我该怎么办?
1 回答
您应该能够使用
self.kwargs['name']
访问该参数 . 此外,get_queryset
应该返回一个查询集 .如果要使用
DetailView
泛型视图,还需要在URL中使用pk
而不是name
. 之后,您只需要在customerDetailView
类中定义model = Customer
和slug_field = 'name'
,它应该可以工作 . 您根本不需要访问self.kwargs['name']
. [source]如果您确实想在URL中使用
<name>
,还需要将slug_url_kwarg
更改为name
(除了slug_field = 'name'
:或覆盖
get_object
:无需修改 class 中的
slug_field
和slug_url_kwarg
.