• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

Tech Life

エンジニアの生き方を考えるメディア

  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • 利用規約
  • プロフィール
You are here: Home / IT・プログラミング / Python / フレームワーク / Django / Djangoの組み込み日付(date),時間(time),現在時刻(now)を使って時刻を利用する

Djangoの組み込み日付(date),時間(time),現在時刻(now)を使って時刻を利用する

2019年5月8日 by 9nmatsumoto

組み込みタグとは、Djangoのテンプレートを利用する際に値を変換する便利な機能。こちらの記事で、タグを作成する方法について記載した。

今回の記事では、時刻を表示する組み込みタグのdate, time, nowについて詳細に説明する。

Contents
  1. 組み込みタグdateの使い方
  2. 組み込みタグ(time)の使い方
  3. 組み込みタグ(now)の使い方

組み込みタグdateの使い方

dateは、dateフォーマットの変数をテンプレート上で指定した形式に変換して表示するためのタグ。以下のような書き方をする。

{{ value|date:"D d M Y" }}

dateフォーマットとは、以下のようなクラスの変数を含む。

  • django.db.models.DateTimeField
  • datetime.datetime(pythonの標準ライブラリ)
  • datetime.date(pythonの標準ライブラリ)

では実装してみましょう。

  • models.pyの実装
from django.db import models
from django.utils import timezone
from django.urls import reverse

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

Postモデルのcreated_date、published_dateはmodels.DateTimeFieldとして設定している。
次にviews.pyで、ListViewを使ってモデルから値を取得してみる。

  • views.pyの実装
from django.views.generic import ListView

class PostListView(ListView):
    model = Post

    def get_queryset(self):
        return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')

次にtemplateで以下のように日付を変換する。

  • テンプレート(post_list.html)の実装
{% extends 'blog/base.html' %}
{% block content %}
<div class="centerstage">
    {% for post in post_list %}
        <div class="post">
            <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
            <div class="date">
                <p>Published on: {{ post.published_date|date:"Y m d"}}</p>
                <!-- |date "Y m d"(年 月 日) -->
            </div>
            <a href="{% url 'post_detail' pk=post.pk %}">Comments: {{ post.approve_comments.count }}</a>
        </div>
    {% endfor %}
</div>
{% endblock %}

このように設定すると画面では、下のように表示される。

ちなみに、|dateの横の"Y m d"は他にも定義の方法がある。

詳細は、こちらの公式サイトをご参照下さい

他にも、以下のようにpythonの標準ライブラリのdatetime.dateにdateフィルターを使うこともできる。

  • views.pyの実装
from django.views.generic import ListView
from datetime import date
from . import models

class SchoolListView(ListView):
    model = models.School

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["new_date"] = date.today()# 日付をpythonの標準ライブラリから取得
        return context

テンプレートは、以下のように定義する。

  • テンプレートの実装の実装
{% extends 'basic_app/basic_app_base.html' %}

{% block body_block %}

<h1>Welcome to a list of all schools</h1>
    <ol>
        {% for school in school_list %}
        <h2><li><a href="{{ school.id }}">{{ school.name }}</a></li></h2>
        <h4>{{ new_date|date:"Y m d" }}</h4>
        {% endfor %}
    </ol>

{% endblock %}

画面上は、以下のように表示される。

組み込みタグ(time)の使い方

timeの場合は、以下のようなクラスの変数を利用できる。

  • django.db.models.DateTimeField
  • datetime.datetime(pythonの標準ライブラリ)

views.pyは下のように定義する。

  • views.pyの実装
from datetime import datetime
from . import models
from django.views.generic import ListView

class SchoolListView(ListView):
    model = models.School
    template_name = 'basic_app/school_list.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["new_date"] = datetime.now()
        return context

次に、テンプレートは以下のように定義する。

  • テンプレートの実装の実装
{% extends 'basic_app/basic_app_base.html' %}
{% block body_block %}

<h1>Welcome to a list of all schools</h1>
    <ol>
        {% for school in school_list %}
        <h2><li><a href="{{ school.id }}">{{ school.name }}</a></li></h2>
        <h4>{{ new_date|date:"Y/m/d H:i:s" }}</h4>
        {% endfor %}
    </ol>

{% endblock %}

実行すると、以下のように表示される。

組み込みタグ(now)の使い方

nowを利用すると、テンプレート上に現在時刻を表示できるようになる。

以下のように記載する。

{% now "Y/m/d H:i:s" %}

例えば、テンプレートを以下のように実装する。

  • テンプレートの実装の実装
{% extends 'basic_app/basic_app_base.html' %}
{% block body_block %}

<h1>Welcome to a list of all schools</h1>
    <ol>
        {% for school in school_list %}
        <h2><li><a href="{{ school.id }}">{{ school.name }}</a></li></h2>
        {% endfor %}
    </ol>
        <h4>{% now "Y/m/d H:i:s" %}</h4>
{% endblock %}

立ち上げると、画面上で以下のように表示される。

以上で、テンプレートの組み込みタグ、date, time, nowの利用方法について記載しました。
テンプレート上で、dateのフォーマットを変えたい場合は是非、ご活用下さい

 

Filed Under: Django Tagged With: date, django, now, python, time

Primary Sidebar

注目記事

ITエンジニアとしてスキルを高めるためのUdemy講座一覧(格安クーポン付き)

イメージ画像

スポンサーリンク

Footer

格安学習講座

ITエンジニアとしてスキルを高めるためのUdemy講座一覧(格安クーポン付き)

20時間以上のコースが2000円以内で購入して、一つの分野をマスターできます!!