質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

647閲覧

ListViewを継承しているClassViewのメソッドのkwargsの中身

Sano

総合スコア19

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/29 03:22

編集2019/04/30 03:58

ListViewを継承したClassViewのメソッドで受け取れる,kwargsの正体がはっきりわかりません。

python

1# models.py 2 class Category(models.Model): 310 411 name=models.CharField(max_length=255) 512 613 def __str__(self): 714 return self.name 815 916 def get_latest_post(self): 1017 queryset = Post.objects.filter( 1118 category=self) 1219 return _get_latest_post(queryset) 1320 1421 def get_or_create_curry_category(): 1522 category_list=["プログラミング", "料理", "映画"] 1623 for i in category_list : 1724 category, _ = Category.objects.get_or_create(name=i ) 1825 return category 1926 2027 2128 class Post(models.Model): 2229 author = models.ForeignKey('auth.User', on_delete=models.CASCADE) 2344 category = models.CharField(choices=CATEGORY_CHOICES, max_length=10, default="プログラミング") 2447 category=models.ForeignKey( 2548 Category, verbose_name="カテゴリ", on_delete=models.CASCADE, 2649 default=get_or_create_curry_category, 2750 )

python

1views.py 2 class CategoryListView(ListView): 3 50 4 51 model=Post 5 52 template_name="blog/post_list.html" 6 53 7 54 def get_queryset(self): 8 55 category=get_object_or_404(Category, pk=self.kwargs['pk'])#<--ここ 9 56 return Post.objects.filter(category_id=category).order_by('-published_date') 10 57 11 58 def get_context_data(self, **kwargs): 12 59 category=get_object_or_404(Category, pk=self.kwargs['pk'])#<---ここ 13 60 categories=Post.objects.filter(category_id=category).order_by('-published_date') 14 70 context = super().get_context_data(**kwargs)#<---ここ 15 71 context["category_data"] = str(category.name)+str("カテゴリーの投稿は")+str(len(categories))+str("件あります")

category=get_object_or_404(Category, pk=self.kwargs['pk'])ではそのCategoryのpkを取得していることはなんとなくわかるのですが、pkを含むkwargsの中身がわからずに困っています。
Categoryの初期化メソッドを rerutn self.categorynameとし、
Category.objects.filter(**kwargs)としhtmlに表示させたところ
<QuerySet [<Category: プログラミング>, <Category: 料理>, <Category: 映画>]>
となりました。
Categoryの初期化メソッドを与えずにhtmlに表示させたところ,
<QuerySet [<Category: Category object (7)>, <Category: Category object (8)>, <Category: Category object (9)>]>
となりました。
初期化メソッドの書き方によってViewの動きも変化するということでしょうか?

context = super().get_context_data(**kwargs)の中身は自分なりに考えてみました。
context["category_data"]をcontext["category_data"]=contextとし、htmlに表示させてみたところ
object_list,is_paginated, paginator, page_objが取得できました。
この4つのコンテキストデータの説明はドキュメントで読んだのですが、本当にこれがkwargsの中身なのでしょうか。

それぞれのkwargsの正体、確認する方法、またその引数はどこで指定されているのかをご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本当にこれがkwargsの中身なのでしょうか

そうだと思います。

ここでひとつひとつご説明することもできますが、いまお持ちのすべての疑問を解消するには、ご自身で Django のコードをご覧になるのが一番だと思います。

↑ はクラス ListView の定義箇所なので、そこから親クラスも含めてコードを追っていってみてください(高々数百行追えばわかると思います)。

投稿2019/05/03 00:44

gh640

総合スコア1407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問