我有一个基于类的视图来列出来自特定群体的动物。有多个畜群,因此用户可以看到来自ONE畜群的所有动物,或来自所有畜群的所有动物。
我如何拥有可选的URL参数并在CBV中处理它?</ p>
网址:
$( function () {
$(".owl-carousel").each(function() {
$(this).owlCarousel({
items: 10,
singleItem: true,
autoPlay: true,
stopOnHover: true,
transitionStyle: true
});
});
**$( "#accordion" ).accordion({
heightStyle: "content"
});**
});
我的观点:
url(r'list/(?P<hpk>[0-9]+)/$', AnimalList.as_view(), name = 'animal_list'),
url(r'list/$', AnimalList.as_view(), name = 'animal_list'),
转到类似class AnimalList(ListView):
model = Animal
def get_queryset(self):
if self.kwargs is None:
return Animal.objects.all()
return Animal.objects.filter(herd = self.kwargs['hpk']) # <--- line 19 that returns an error
的网址工作正常,而/animals/list/3/
失败并显示错误。这是错误:
/animals/list/
我知道KeyError at /animals/list/
'hpk'
Request Method: GET
Request URL: http://localhost:8000/animals/list/
Django Version: 1.8.2
Exception Type: KeyError
Exception Value:
'hpk'
Exception Location: /var/www/registry/animals/views.py in get_queryset, line 19
是一个字典,当我在视图中self.kwargs
时,它会显示它是空的。但我无法弄清楚如何捕捉这种情况。我觉得这是一个我错过的简单,愚蠢的错误。
答案 0 :(得分:1)
我会使用GET参数而不是单独的URL来实现它。使用此方法,只有一个URL model.Edit.Countries = new SelectList(manager.GetCountries(), "Id", "Name");
可通过参数进行过滤,例如/list/
。
这样更灵活,因为您最终可以添加更多查询/list/?hpk=1
/list/?hpk=1&origin=europe
答案 1 :(得分:0)
对于任何可能偶然发现并且需要答案的人来说,这是我的工作代码,在找出它之后:
class AnimalList(ListView):
model = Animal
def get_queryset(self):
if 'hpk' in self.kwargs:
return Animal.objects.filter(herd = self.kwargs['hpk'])
return Animal.objects.all()
基本上,我们会测试hpk
列表中是否存在网址参数self.kwargs
。如果是,我们过滤查询集。否则,我们会归还所有动物。
希望这有助于某人:)