本棚アプリケーションの作成②【5-3 index_viewの実装】

function-based viewの理解を深めよう

ここまで、function-based viewの最低限の流れについて理解してきました。

次に、viewとModelを連携させましょう

views.pyファイルにコードを追記します

bookproject/book/views.py

・・・省略・・・
def index_view(request):
    print('index_view is called')
    return render(request, 'book/index.html',{'somedata':100})
・・・省略・・・

・・・省略・・・
def index_view(request):
    object_list = Book.objects.all()
    return render(request, 'book/index.html',{'object_list':object_list})
・・・省略・・・

に編集

次にブラウザ上でデータを表示させるため、index.htmlファイルにコードを書いていきましょう。

bookproject/book/templates/book/index.html

{{ somedata }}

{% extends 'base.html' %}

{% block title %}書籍一覧{% endblock %}
{% block h1 %}書籍一覧{% endblock %}

{% block content %}
    {% for item in object_list %}
    <div class="p-4 m-4 bg-light border boorder-success rounded">
        <h2 class="text-success">{{ item.title }}</h2>
        <h6>カテゴリ:{{ item.category }}</h6>
        <div class="mt-3">
            <a href="{% url 'detail-book' item.pk %}">詳細へ</a>
        </div>
    </div>
    {% endfor %}
{% endblock content %}

に編集

サーバーを立ち上げてhttp://127.0.0.1:8000/にアクセスします

(venv) $ python manage.py runserver 

index_viewとListBookViewの表示が同じであることを確認しましょう。

ここからfunction-baseb viewの腕の見せ所です。データを表示させる順番を変えていきます。

まずは、管理画面からデータを一つ追加します。サーバーを立ち上げ、管理画面(127.0.0.1:8000/admin/)にアクセスします。

追加するデータは次の通りです。

 

Title:ビジネス最前線

Text:最新のビジネス

Category:ビジネス

 

 

3つ本のカテゴリは上から「business」「life」「business」となっています。

これらの、カテゴリごとに表示させるためにカスタマイズをします。

views.pyファイルを編集します。

bookproject/book/views.py

・・・省略・・・
def index_view(request):
    object_list = Book.objects.all()
    return render(request, 'book/index.html',{'object_list':object_list})
・・・省略・・・

・・・省略・・・
def index_view(request):
    object_list = Book.objects.order_by('category')
    return render(request, 'book/index.html',{'object_list':object_list})
・・・省略・・・

に編集

改めてサーバーを立ち上げてhttp://127.0.0.1:8000/にアクセスします。

(venv) $ python manage.py runserver 

上から2つが「business」に関する本、そして、一番下が「life」に関する本となっています。つまり亜k手ごりごとに並び替えができました。

 

このように、function-based view を使うことによって、シンプルなコードで直観的に実装をすることができます。