[Django] タグ内での足し算、引き算

よく忘れるのでメモ

[Django] テンプレートの共通の部分を使いまわそう

2019/3/20追記

この記事を書いた当時は理解が浅くこの記事にちょっと甘い部分がありました。

もし良ければこの記事も目を通していただけると嬉しいです

[Django] “‘block’ tag with name ‘content’ appears more than once”ってエラーが出た

 

 

Djangoでは「extend」や「block」という組み込みタグを使うことでテンプレートの共通の部分を使いまわせたりします。

複数のテンプレートで共通の部分がある場合などはこの組み込みタグを使って使いまわすといいと思います。

そのようにしておくと共通の部分を変更する際に元の部分の変更だけで済み、すべてのテンプレートを1つ1つ変更しなくてもよくなるため是非活用したい機能です。

親テンプレートのindex.html

 

{% block content%}と{% endblock%}で囲まれた場所に子テンプレートが挿入されます。

子テンプレートとしてcontentA.htmlとcontentB.htmlを用意しました。

 

両方とも1行目で親テンプレートを拡張したことを示しています。違うのは5行目の1行だけ

views.pyはこんな感じ

アクセスすると

こう表示されます

views.pyを書き換えてhello/contentB.htmlへ行くようにすると

こんな感じに表示されます。

今回の例だと親テンプレートを変更するだけで2つの記事に変更が反映されるので便利ですね。

DjangoでURLから値を受け取る

URLから動的に値を受け取ってみる。

前回の記事をちょっといじって

「http://XXXXX/?page=2」なら2ページ目。「http://XXXXX/?page=3」なら3ページ目にアクセスできるようにしたい。

request.GET[‘page’]で取得できるので

こんな感じにしてやればよい

 

しかしこのコードだと「http://XXXXX」にアクセスした際にpage_numberが無くてDjangoが困ってしまうので

みたいにしてあげると良い

 

 

 

DjangoでPagination

Paginationの実装

前回の記事だと全部のArticleが列挙されてしまうのでPaginationを実装する

3,7,9行目がポイント

各ページに3つ記事を表示します。そのうち2ページ目の項目の要素のみを送っています

こんな感じに該当する部分だけ引っ張ってくれます。便利ですね

Djangoでfor文

こんな感じでテンプレートに値を送ります

index.htmlはこんな感じ

こんな感じで列挙してくれる

Djangoでモデルを作成する

models.pyを以下のように編集

このままだと管理画面でこう表示されちゃう

こんな感じで表記すると記事のタイトルが表示されるようになるので見やすいです

Djangoの管理画面にモデルを追加する

管理画面からモデルを追加しようと思った時

モデル追加するの忘れてこんな画面に遭遇することがよくある。

管理画面上に表示するには「アプリケーション名/admin.py」の

を次のようにする

 

 

Djangoでアプリケーションを追加する

忘れずにsetting.pyにも追加しておこう