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の正体、確認する方法、またその引数はどこで指定されているのかをご教授願います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。