前提・実現したいこと
Djangoを勉強しております。
Python(Django)を用いて、以下のような構成のブログ記事ページを作りたいです。
____________________
カテゴリA
カテゴリAの記事を新しい順に4件表示
カテゴリB
カテゴリBの記事を新しい順に4件表示
____________________
以下は現状のコードです。
◆アプリケーション名:blog
◆urls.pyに該当のページを
Python
1path('',views.top,name='top')
と定義し、
◆view.pyを
Python
1def top(request,id): 2 context = { 3 'categories': Category.objects.all(), 4 'blog_list': Blog.objects.filter(category_id=id), 5 } 6 return render(request, 'blog/top.html',context)
としています。(カテゴリリストA(id=1),B(id=2)および、それぞれのカテゴリ内の記事が取り出されるようにフィルターされたブログリストをテンプレートに渡しています)
◆テンプレート(top.html)※body内のみ
html
1 <body> 2 <h1>トップページ</h1> 3 {% for category in categories %} 4 <div> 5 <a>{{category}}</a> 6 {% for blog in blog_list|slice:":4" %} 7 <article> 8 <h2>{{ blog.title}}</h2> 9 </article> 10 {% endfor %} 11 </div> 12 {% endfor %} 13 </body>
◆models.py
Python
1class Category(models.Model): 2 name = models.CharField('カテゴリ名', max_length=255) 3 4 def __str__(self): 5 return self.name 6 7class Blog(models.Model): 8 category = models.ForeignKey(Category,verbose_name='カテゴリ',on_delete=models.PROTECT) 9 title = models.CharField('記事タイトル',max_length=255) 10 text = models.TextField('記事本文',blank=False) 11 created_at = models.DateTimeField('作成日',default=timezone.now) 12 13 def __str__(self): 14 return self.title
発生している問題・エラーメッセージ
TypeError: top() missing 1 required positional argument: 'id'
試したこと
idをpkにして試しても
TypeError: top() missing 1 required positional argument: 'pk'
と同様のエラーが出てきました。
また、公式リファレンスとにらめっこしてみたのですが、全く正解への検討がつきませんでした。
非常に経験が浅く、周りに頼れる人もいないため、質問させていただくこととしました。
お手数おかけしますが、知恵をお貸しいただけないでしょうか。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Python 3.6.2
Django 2.0
開発環境:Mac
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/05 16:28
2020/07/05 23:27
2020/07/06 08:32