Djangoを使って将棋棋譜管理アプリを作る4　～Viewの作成～

## はじめに
Djangoを使って将棋の棋譜管理アプリを作っていくなかでの備忘録、**第4回**です。

## 作業環境
今回の作業環境は以下の通りです

- Windows 10 Pro
- Anaconda
    - version1.7.2
    - python 3.7
        - django 2.2.5
- git
    - version 2.25.0.windows.1
- mysql
    - ver 8.0.15 for Win64 on x86_64

また、Djangoのディレクトリ構造は次のようになります。

```
- kifu_app_project/
    - kifu_app_project/
        - __init__.py
        - setting.py
        - urls.py
        - wsgi.py
    - kifu_app/
        - migrations/
        - __init__.py
        - admin.py
        - apps.py
        - models.py
        - tests.py
        - views.py
    - manage.py
    - .gitignore
```

## 本稿の内容
- URLの設定
- Viewの設定
- Templateの作成

## URLの設定
まずはURLを設定していきます。
「このURLに来たら、このメソッドを行って！」ということを決めておくことです。
このように、指定されたURLに対して、どのようなページを表示するかを決定する機能を、"URLディスパッチャ"と言います。

更に、このURLディスパッチャの動作は、"URLConf"と呼ばれる設定ファイルに書くことが決まています。
Djangoでは、urls.pyがURLConfに相当します。

以下が参考資料です。

[【Django入門】urls.py（URLConf）の役割と使い方][1]

### 大まかなURLの設定
まず、Djangoのプロジェクト全体に対して、kifu_appアプリケーションでのURLの設定を読み込むようにします
内側のkifu_app_project内にあるurls.pyを以下のように編集します。

```python:kifu_app_project/urls.py
"""kifu_app_project URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include       # includeを追加

urlpatterns = [
    path('kifu_app/', include('kifu_app.urls')),      # 追加
    path('admin/', admin.site.urls),
]
```

これで、kifu_app内のURL設定が読み込まれるようになりました！

### 細かなURLの設定
次に、kifu_appアプリケーション内での、細かいURLの指定を行います。

kifu_app内に、urls.pyを作成してください。

このurls.pyでやることは、
1. views.pyの全てのメソッドをimport
2. アプリケーション名を指定
3. URLを記述
です。

```python:kifu_app/urls.py
from django.urls import path

from . import views     # 1.

app_name = 'kifu_app'      # 2.

urlpatterns = [
    path('', views.index, name='index'),    # 3.
]
```

path関数の第一引数にURL、第二引数に呼び出すメソッドを記述します。
第三引数(name属性)はナシでもかまいませんが、指定しておくと後で楽になります。

先程kifu_app_project内のurls.pyで、kifu_appアプリケーションのURLを`'kifu_app/'`としました。
このため、例えばindex.htmlが表示されるURLは*localhost:8000/kifu_app/*となることに注意してください。

## Viewの設定
次に、Template(画面)を表示する際に、サーバー側で実行するメソッドを作成します。
これにより、動的にデータを表示できるようになります。

### views.pyの編集
先程、urls.pyでindexメソッドを呼び出すと書いたので、実際にindexメソッドを作成します。
ここでは、試しに今日の日付を取得して、Templateに渡しましょう。

```python:views.py
from django.shortcuts import render

# Create your views here.

import datetime

def index(request):
    today = datetime.date.today()
    return render(request, 'index.html', {'today': today})
```

renderメソッドをreturnすることで、Viewが表示されます。
引数には、
- 変数request、
- templateファイル名
- 渡したい変数を辞書型
で渡します。

## Templateの作成
最後に、実際の画面(Template)を作成していきます。

### index.htmlの作成
Viewで、index.htmlにデータを渡すと書いたので、index.htmlを作成します。
書き方はHTMLを書く場合とほとんど同じです。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Kifu APP</title>
    </head>
    <body>
        <h3>{{ today }}</h3>
    </body>
</html>
```

Viewから渡された変数を使用したい場合は`{{}}`の中に辞書のkeyを書きます。

これでサーバーを立ち上げて、アクセスしてみましょう！
今日の日付が出ればOKです！


## 次回予告
[DBのデータをTemplateに渡す][2]



[1]:https://www.sejuku.net/blog/26584
[2]:https://qiita.com/r-programming/items/e8afa2aae9246c4420db