はじめに
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)の役割と使い方
大まかなURLの設定
まず、Djangoのプロジェクト全体に対して、kifu_appアプリケーションでのURLの設定を読み込むようにします
内側の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でやることは、
- views.pyの全てのメソッドをimport
- アプリケーション名を指定
- URLを記述
です。
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に渡しましょう。
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を書く場合とほとんど同じです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Kifu APP</title>
</head>
<body>
<h3>{{ today }}</h3>
</body>
</html>
Viewから渡された変数を使用したい場合は{{}}
の中に辞書のkeyを書きます。
これでサーバーを立ち上げて、アクセスしてみましょう!
今日の日付が出ればOKです!