プログラム前回の続きtohutokonsome.hatenablog.com今回は、以下のようにトップ画面から個別記事に飛ぶようにリンクを貼っていきます。個別記事を返す関数をviews.pyに追加する。次回はしばらくないかも個別記事を返す関数をviews.pyに追加する。前回のhome.htmlを返すhome関数と同様に、個別記事を返す「post_details」関数を作成します。ポイントは、Postオブジェクトの取得方法です。{'post':post})前回のhome.htmlでは、トップ画面に記事一覧を表示するために、Postオブジェクトをすべて取得していました。Post.objects.order_by('pub_date')ですが、今回必要なのは、個別記事に表示するひとつのPostオブジェクトのみ必要になります。Post(pk=post_id)という書き方をしています。documentationpkは字のごとくプライマリキーを表しており、管理者画面から投稿した記事にはデフォルトでidなるプライマリキーが振られています。ここでは、引数から与えられたpost_idをもとに、一意のPostオブジェクトを取得しています。取得したPostオブジェクトは、「post_details.html」に渡します。次に、post_details関数を呼び出すための定義をurls.pyに追加します。document_root=settings.MEDIA_ROOT)ちょっとわかりずらいのですが、「P<post_id>」の部分がポイントなのかなぁと思っています。Djangoは、「http://localhost/posts/[0-9]+」にマッチするリクエストがあった場合に、さきほど作成した「post_details」関数を呼び出します。このとき、「P<引数名>」書いておくと、Djangoは、post_details関数に名前付き引数として、引数を渡すみたいです。これによって、前述のpost_details関数は、受け取ったpost_idをキーに、Postオブジェクトを取得することができます。ちなみに、「P<post_id>」と書かないと、関数に引数を渡さないような印象を受けますが、特に書かなくても正規表現でキャプチャした値は、関数に渡す仕組みになっているようです。「P<post_id>」としておくと、名前付き引数として扱えるので、引数の順番を意識する必要がなくなるというわけです。documentationhome.htmlの編集home.htmlでは、記事のタイトルにタグをつけて、記事へのリンクを貼ることにします。postオブジェクトは複数あるので、こんな感じでループさせる。‘urls.pyに定義したname’}}」は前回同様なのですが、post.idをここに書くことで、引数として渡せるみたいです。最後に、個別記事のhtmlを作成します。いっても、ほぼhome.htmlをコピペしただけの内容になっています。</p>次回はしばらくないかもとりえず、ここまでの内容でトップ画面から個別記事に遷移するブログちっくな機能の実装ができました。画面のレイアウトについては、cssの話になってしまうので、メモが必要な局面がでてきたら更新していこうかと思います。風邪が長引いてランニングも勉強もちょっとさぼりぎみ。3連休だしVue.jsをはじめました。»プロフィール30歳からWebやらなんやらを学び始めた人のブログです。(4)検索はてなブログをはじめよう!konoemarioさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。