🐍

【Python】docker&DjangoでViewを表示させる

2024/11/17に公開

開発環境:

  • windows 11
  • Vscode 1.87.2
  • Docker 26.1.1
  • Docker-compose 2.27.0
  • python
  • Django

達成目標

  • アプリケーションフォルダにviewURLconfを定義することができる。
  • アプリケーションフォルダ内とプロジェクトフォルダ内のURLを管理することができる。

前提

  • DjangoのマニュアルのWriting your first Django app, part 1に準ずる内容となっている。

https://docs.djangoproject.com/en/5.1/intro/tutorial01/

  • アプリケーションのトップページが表示されている状態から解説をしていく。

開発環境の構築がまだの方はこちらから↓

https://zenn.dev/code_journey_ys/articles/ddd8ba305a2538

基礎編

1.ビューの定義

アプリケーションフォルダ内のviews.pyに表示内容を記述

アプリケーションフォルダ/views.py
from django.shortcuts import render

# Create your views here.
## 以下を追加
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
## ここまで
  • index(request):Djangoビューとして定義されている関数(ビュー関数)。
  • HttpResponse:HttpResponseオブジェクトを返す。テキスト(ここではHello, world. You're at the polls index.)をブラウザに表示させるために使います。
  • request:ビューに渡すHTTPリクエストオブジェクトです。

2.URLconf(URL構成)の定義

アプリケーションフォルダ内のurls.pyフォルダを作成

アプリケーションフォルダ内のurls.pyフォルダを作成
New-Item users/urls.py

views.pyフォルダを編集

views.pyに以下を全て追加する
from django.urls import path
from . import views

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

3.プロジェクトのurls.pyにアプリケーションのurls.pyを含める

from django.contrib import admin
from django.urls import path
from django.urls import path, include #追加

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

4.動作確認を行う

http://localhost:8000/users/にアクセスし、表示を確認する。

応用編(テンプレート使用)

1.テンプレートフォルダを作成

テンプレートフォルダを作成
mkdir users/templates/users
テンプレートファイルを作成
New-Item users/templates/users/edit.html

2.edit.htmlファイルを編集

以下のコードを全て追加する
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit Page</title>
</head>
<body>
    <h1>Edit Page</h1>
    <p>This is the edit page.</p>
</body>
</html>

3.ビューファイルを編集

views.pyファイルに以下を全て追加
def edit(request):
    return render(request, 'users/edit.html')  # テンプレートファイルのパスを指定

4.プロジェクト設定フォルダ内のテンプレート設定の編集

settings.py ファイルに、TEMPLATES 設定が正しく指定されていることを確認
from pathlib import Path # 追加
BASE_DIR = Path(__file__).resolve().parent.parent # 追加
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR, 'users', 'templates'], # 追加
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
BASE_DIRとは

BASE_DIRはプロジェクトのルートディレクトリを示す。
BASE_DIRを付けてテンプレートフォルダを指定することが望ましい。

ファイルディレクトリ
myproject/       # プロジェクトフォルダ
├── manage.py
├── reha_navi/   # プロジェクト設定フォルダ
│   ├── settings.py
│   ├── urls.py
│   └── ...
├── users/       # アプリケーションフォルダ
│   ├── templates/
│   │   └── users/
│   │       └── edit.html  # このファイルが必要
│   ├── views.py
│   ├── urls.py
│   └── ...

5.コンテナを再起動して動作を確認する

コンテナ再起動
docker-compose restart

参考

https://docs.djangoproject.com/ja/5.1/intro/tutorial01/

Discussion