djangoでtemplatesの読み込み

2020年12月21日

djangoでtemplatesを読み込む

以前に書いた記事がちょっと微妙だったので書き直しておきたいと思います。

djangoのtemplatesを作成する一は「プロジェクト直下」と「アプリ直下」の二通りがあるみたいです。どちらも一長一短あるみたいですが、今回はデフォルトである「アプリ直下」に設置したいと思います。

参考:
  ・DjangoでのTemplatesの場所
  ・[django]templatesディレクトリを配置する場所(ベストプラクティスを考えてみた)

アプリを作成する

まずはアプリを作成しないと始まらないのでプロジェクト直下(manage.pyがある階層)で下記のコマンドを叩いて「app1」と言う名前のアプリを作成します。


 python3.6 manage.py startapp app1

上記のコマンドで「app1」が出来ているのを確認します。configとmanage.pyと同じ階層ですね。


ls
app1  config  manage.py

「django_project/config/settings.py」に下記の一行を追加し、アプリを読み込ませます。


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config', # 追加
]

テンプレートを作成する

htmlファイルを作成します。階層は下の通りです。


mkdir ./app1/templates
mkdir ./app1/templates/app1
touch ./app1/templates/app1/index.html

「index.html」には下記の通りの記述をしておきます。


app1_index!!

ルーティングを作成する

urlの元となる「django_project/config/urls.py」を下記の通りに記述します。
「http://xxx.xxx.xxx.xxx/app1/」の続きのurlを「app1.urls」に移譲している感じです。


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

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

次にurlの続きを指定する「django_project/app1/urls.py」を作成し下記の通り記述します。
「http://xxx.xxx.xxx.xxx/app1/」の続きに「index/」を指定しています。
つまり「http://xxx.xxx.xxx.xxx/app1/index/」のurlを叩いたら「views.index」で「views.py」ファイルの「def index」を呼び出します。


from django.urls import path
from . import views

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

「django_project/app1/views.py」を下記の通り記述します。関数の「index」が呼び出され「app1/index.html」がレスポンスで返されるようになっていますね。


from django.shortcuts import render

def index(request):
        return render(request, 'app1/index.html')

結果

下記の通り無事表示されました。

2020年12月21日