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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python 3.x

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2246閲覧

Djangoのデータベース操作における表示する記事のカテゴリ指定方法

Yu-Yokochi

総合スコア7

Django

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python 3.x

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/05 08:36

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のようにすれば、動作すると思います。

python

1# blog/urls.py 2path('<int:id>/', views.top, name='top') 3 4# blog/views.py 5def top(request, id): 6 # snip

カテゴリとブログを表示したいのであれば、下記のようにすれば表示されると思います。
アクセスするURLは、http://127.0.0.1:8000/blog/categories/です。

python

1# blog/models.py 2class Blog(models.Model): 3 category = models.ForeignKey(Category, verbose_name='カテゴリ',on_delete=models.PROTECT 4 related_name='blogs') 5 # snip 6 7# blog/views.py 8from django.views import generic 9from .models import Category 10class CategoryListView(generic.ListView): 11 model = Category 12 13# blog/urls.py 14from .views import CategoryListView 15urlpatterns = [ 16 path('categories/', CategoryListView.as_view(), name='category-list'), 17] 18 19# <project_name>/urls.py 20urlpatterns = [ 21 path('blog/', include('blog.urls')), 22]

html

1<!- blog/templates/blog/category_list.html --> 2<html><head></head> 3<body> 4 {% for category in object_list %} 5 <p>Category: {{ category.name }}</p> 6 {% for blog in category.blogs.all() %} 7 <p>Blog: {{ blog.title }} </p> 8 {% endfor %} 9 <br /> 10 {% endfor %} 11</body> 12</html>

投稿2020/07/05 12:05

編集2020/07/05 23:27
hasami

総合スコア1277

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

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

Yu-Yokochi

2020/07/05 16:28

ご回答していただき、誠にありがとうございます。 私の伝え方が悪かったよう大変申し訳ないのですが、 カテゴリごとにページを作るのではなく、以下の構成を同一ページで行いたいという意図でした。 ____________________ ヘッダー カテゴリA(カテゴリ名) カテゴリAの記事1(タイトル) カテゴリAの記事2(タイトル) カテゴリAの記事3(タイトル) カテゴリAの記事4(タイトル) カテゴリB(カテゴリ名) カテゴリBの記事1(タイトル) カテゴリBの記事2(タイトル) カテゴリBの記事3(タイトル) カテゴリBの記事4(タイトル) フッダー ___________________ お手数おかけしますが、再度知恵をお貸しいただけると幸いです。 何卒よろしくお願いいたします。
hasami

2020/07/05 23:27

回答を追加しました。
Yu-Yokochi

2020/07/06 08:32

ありがとうございます。おかげさまで解決することができました。 この度は大変お世話になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問