2017-02-11 143 views
-1

使用列表视图,而不是在list_detail Django和失败。Django的Listview.as_view()需要1个位置参数,但是给予2

如何解决这个问题?

我想所有的书在那里出版商==姓名(名称来自URL)。

类型错误在/ app_generic_view /书籍/测试/

as_view()需要1周位置的说法,但被赋予

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') 

回答

1

你的功能books_by_publisher()取请求作为参数。所以我认为这是一个观点。它应该返回一个HttpResponse实例或派生类之一。

相反,你返回ListView.as_view()。 ListView.as_view()是一个返回视图(python函数)的方法。 as_view()不能将请求作为参数,并且不会返回HTTP响应。

使用基于Django的类图的正确方法是继承预定类别之一,并使用as_view()在你的URL模式,以获得相应的视图功能。

实施例:

# 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'), 
] 
+0

你需要重写'的发布者名称get_queryset'和筛选器。 – Alasdair

0

2为了从另一个调用视图你应该使用:

return ListView.as_view()(request, queryset=Book.objects.filter(publisher=publisher), 
     template_name='publisher_list_page.html') 
+0

的'queryset'和'template_name'参数应该仍然被传递给'as_view':'返回ListView.as_view(查询集= Book.objects.filter(出版商=发布者), TEMPLATE_NAME = 'publisher_list_page.html')(请求)'。但是,在@ Antwane的答案中继承列表视图将是更好的方法。 – Alasdair

相关问题