LoginSignup
2
7

More than 5 years have passed since last update.

共通のテンプレートを呼び出す

Last updated at Posted at 2018-09-09

はじめに

3つの記事で構成しています

  1. Djangoをセットアップする
  2. (この記事)
  3. Django Bootstrap4の導入からSass(SCSS)導入まで

同じプロジェクト内のアプリで共通のテンプレートを呼び出す方法
以下のような雛形をアプリ毎に変更を加えていく必要になるので一括管理がしたい

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
  </body>
</html>

ビューを表示させるための準備

sampleproject/urls.py
from django.contrib import admin
from django.urls import path, include 追加

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

アプリディレクトリ内にurls.pyを追加する
touch sampleapp/urls.py

sampleapp/urls.py
from django.urls import path
from . import views

app_name = 'sampleapp'
urlpatterns = [
    path('', views.index, name='index'),
]
sampleapp/views.py
from django.shortcuts import render

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

app/templates/appの様に追加する
mkdir sampleapp/templates sampleapp/templates/sampleapp

sampleapp/templates/sampleapp/index.html
<h1>Hello, World!</h1>

ターミナルでpython manage.py runserver

ブラウザでhttp://127.0.0.1:8000/にアクセスします
スクリーンショット 2018-09-09 15.06.23.png
無事「Hello, World!」と表示させることができました

ベースとなるhtmlファイルを作成する

プロジェクトディレクトリ直下にtemplatesを追加

mkdir templates

先ほど作成したtemplatesの中にbase.htmlを追加

touch templates/base.html

base.htmlを編集する
templates/base.html
{% load i18n static %}
<!DOCTYPE html>{% get_current_language as LANGUAGE_CODE %}
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>{% block title %}SampleProject{% endblock %}</title>
  </head>
  <body>
    <div class="container">
      {% block content %}
      {{ content }}
      {% endblock %}
      foo bar baz <!-- base.htmlが読み込まれたか確認 -->
    </div>
  </body>
</html>
settings.pyを編集する
settings.py
.
.
.
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': (
            os.path.join(BASE_DIR, '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',
            ],
        },
    },
]
.
.
.
index.htmlを編集する
sampleapp/templates/sampleapp/index.html
{% extends "base.html" %}
{% block content %}
<h1>Hello, World!</h1>
{% endblock %}

確認

ブラウザをリロードしてみましょう

スクリーンショット 2018-09-09 15.32.09.png

base.htmlに記述した「foo bar baz」が追加されている、title属性が確認できれば成功です

補足:title属性をページ毎に変更する

sampleapp/templates/sampleapp/index.html
{% extends "base.html" %}
{% block title %}Hello,World{% endblock %} ←注目
{% block content %}
<h1>Hello, World!</h1>
{% endblock %}
2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7