Python Django 入門トップページ


Django によるコメント掲示板の開発:目次

  1. プロジェクトの作成
  2. Git でコミット
  3. Web サーバを起動しておく
  4. Config
  5. Comments アプリケーションを作る
  6. アプリケーションを有効にする
  7. はじめてのビューを作成する
  8. モデルを作る
  9. マイグレーション
  10. テストデータの設定
  11. データベースからコメント一覧を取得して表示してみよう
  12. Bootstrap の導入
  13. コメントの詳細表示
  14. urls.pyの書き方
  15. HTML のテンプレート化
  16. コメントの新規投稿
  17. コメントの編集機能を追加する
  18. さらにテンプレート化
  19. モデル,マイグレーションファイル,フォームの関連
  20. 入力内容の検証(バリデーション)
  21. コメントを削除する
  22. 一覧を逆順にする
  23. ページネーション
  24. フラッシュメッセージ
  25. Static コンテンツの設置
  26. 更新や削除にもフラッシュメッセージを表示
  27. テストの自動化を実現しよう
  28. デバッグツールバーを使う
  29. generic モジュールを使わずにコメント一覧を取得する
  30. コメント一覧のページネーション
  31. 一覧の表示順序を制御する
  32. generic モジュールを使わずにコメントの詳細を表示する
  33. コメント詳細にページ送り機能を作成する
  34. generic モジュールを使わずにコメント登録機能を作成する
  35. generic モジュールを使わずにコメント編集機能を作成する
  36. generic モジュールを使わずにコメント削除機能を作成する

Django によるコメント掲示板の開発

さらにテンプレート化

これまでの作業で,コメントの新規投稿と更新ができるようになった.しかしながら,新規投稿と更新の画面を比べると全く同じであるのでユーザに混乱をきたすであろう.

まずは,新規投稿ページ

django2022-00015

こちらは更新ページ

django2022-00016

ここで,テンプレート化の方法をうまく活用して,更新画面の見出しやボタンのラベルなどをここで変更しておこう.まず,comment_form.html を修正する.

comments/templates/comments/comment_form.html
{% extends 'base.html' %}

{% block title %}
{{ page_title }}
{% endblock %}

{% block content %}
<div class="container">
    <h1 class="my-5">{{ form_name }}</h1>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn btn-primary">{{ button_label }}</button>
    </form>
</div>
{% endblock content %}

次に,views.py で comment_form に渡す文字列を設定する.このとき get_context_data という関数を作り,その中で値(文字列)を設定すると良い.なお,**kwargs は可変個のキーワード引数を取ることを意味します.

comments/views.py (抜粋)
class CreateCommentView(CreateView):
    model = Comment
    form_class = CommentForm
    success_url = reverse_lazy('comments:index')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_title'] = 'コメントの投稿'
        context['form_name'] = 'コメントの投稿'
        context['button_label'] = 'コメントを投稿する'
        return context

class UpdateCommentView(UpdateView):
    model = Comment
    form_class = CommentForm
    success_url = reverse_lazy('comments:index')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_title'] = 'コメントの更新'
        context['form_name'] = 'コメントの更新'
        context['button_label'] = 'コメントを更新する'
        return context

これによって,新規投稿画面と更新画面でボタンのラベルなどが異なるようになった.

目次に戻る