2017-02-11 25 views
-1

djangoのlist_detailではなくListviewを使用して失敗しました。Django Listview.as_view()は1つの位置引数をとりますが、2が与えられました

これを修正するにはどうすればよいですか?

パブリッシャー== name(urlからの名前)のすべての書籍を取得したいと考えています。 app_generic_view /書籍/テスト/時

はTypeError/

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

答えて

1

関数books_by_publisher()が引数としてリクエストを受け取ります。だから私はこれが見解だと思う。 HttpResponseインスタンスまたは派生クラスの1つを返す必要があります。

代わりに、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'), 
] 
+0

あなたにも発行者名に 'get_queryset'とフィルタを無効にする必要があります。 – Alasdair

0

を与えられた。

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

引数は依然としてas_view' 'に渡されるべきtemplate_name'' queryset'と '' ListView.as_viewを返す(クエリセット= Book.objects.filter(パブリッシャ=出版社)、 template_name = 'publisher_list_page.html')(リクエスト) '。しかし、@ Antwaneの答えのようにリストビューをサブクラス化することは、より良いアプローチでしょう。 – Alasdair

関連する問題