在django中使用Listview而不是list_detail并失败。
如何解决这个问题?
我希望获得所有图书,其中publisher == name(来自网址的名称)。
/ app_generic_view / books / test /
中的TypeErroras_view()需要1个位置参数,但有2个被给出
def books_by_publisher(request, name):
publisher = get_object_or_404(Publisher, name=name)
return ListView.as_view(request, queryset=Book.objects.filter(publisher=publisher),
template_name='publisher_list_page.html')
答案 0 :(得分:2)
您的函数books_by_publisher()接受请求作为参数。所以我认为这是一个观点。它应该返回一个HttpResponse实例或一个派生类。
而是返回ListView.as_view()。 ListView.as_view()是一个返回视图的方法(python函数)。 as_view()不能将请求作为参数,也不会返回HTTP响应。
使用基于Django类的视图的正确方法是将一个预定义的类子类化,并在urlpatterns中使用as_view()来获取相应的视图函数。
示例:
# models.py
class MyCustomView(ListView):
model = Publisher
template_name = publisher_list_page.html
# urls.py
urlpatterns = [
url(r'^a_pattern/(?P<name>[a-z]+)', MyCustomView.as_view(), name='a_name'),
]
答案 1 :(得分:0)
要从另一个视图中调用视图,您应该使用:
return ListView.as_view()(request, queryset=Book.objects.filter(publisher=publisher),
template_name='publisher_list_page.html')