【Django】定数の設定方法(最新記事を定数で設定・表示する)

時計 2020.05.07 / 時計

【Django】定数の設定方法(最新記事を定数で設定・表示する)

Djangoにおける定数を設定し、使用する方法について解説いたします。

DjangoでWEBアプリケーションを作成している場合や、ブログを運営していると常時使用する定数を設定したいときがあります。

私の場合だと、このサイトOFFICE54はDjangoで構築しており、タグリストや最新記事の情報を取得するのに定数を使用しています。

本記事執筆時のDjangoバージョンは3.04、さくらのVPS(OS:CentOS8)を使用しています。

ネットで調べてもあまり情報がないdjangoの定数設定方法について詳しく解説していきます。

定数ファイルの作成

まず定数を設定するための定数ファイルを作成する必要があります。

定数ファイルの名前もなんでもいいのですが、ここではconst.pyとします。

作成する場所はsettings.pyが入っているディレクトリでも、 アプリケーションディレクトリ(models.pyが入っているディレクトリ)でも構いません。

私の場合はmodels.pyやadmin.pyがあるアプリケーションディレクトリ内にconst.pyを作成しました。

定数ファイルに定数を設定

from .models import モデル名
def 関数名(request):
        context = {
            '変数名': クエリセット,
        }
        return context

上記コードをconst.pyに記述します。

内容を詳しく説明しますと、まずmodels.pyからモデルをインポートしています。

from .models import モデル名

次に関数を定義します。

def 関数名(request):

その後に設定したい変数を書き、returnで変数セットcontextを返しています。

context = {
  '変数名': クエリセット,
}
  return context

変数に入れたい値をクエリセットで取得しますので、クエリセットの書き方がわかっている必要があります。

このサイトoffice54の場合は、下記のように最新記事の情報を取得しています。

from .models import Article
def blog_articles(request):
        context = {
            # 最新記事:新しい記事から10件取得する
            'latest_articles': Article.objects.order_by('created_at').reverse()[:10],
        }
        return context

Articleというモデルをインポートして、blog_articlesという関数を定義し、latest_articleという変数の中にクエリセットで得た最新記事10件の情報を入れてます。

settings.pyに定数ファイルを追加

定数ファイルconst.pyが作成できたら、次にsettings.pyに定数ファイルの存在を知らせる必要があります。

具体的には下記のコードをsettings.pyのTEMPLATESのOPTIONS内に追記します。

TEMPLATES = [
  {
      'BACKEND': 'django.template.backends.django.DjangoTemplates',
      'DIRS': [],
      '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',
              '(アプリディレクトリ名.)定数ファイル名.関数名',  #これを追記
          ],
      },
  },
]

私のようにアプリケーションディレクトリ(models.pyがあるディレクトリ)内に定数ファイルを作成した場合は、アプリディレクトリ名.定数ファイル名.関数名をOPTION内に追記します。

今回で言えば、webというアプリディレクトリ内に定数ファイルを作った場合だと下記のようになります。

'web.context.blog_articles',

テンプレートで定数を出力

定数ファイルを作成して、settings.pyに定数ファイルの存在を知らせたら、あとはテンプレートファイルの必要な場所に定数を記入するだけです。

上記例ではlatest_articlesという定数を設定しました。

この定数には、クエリセットから得たデータがあるので、それを出力すればいいだけです。

以下に定数から得た最新記事情報を出力するためのコード例を示します。

{% for article in latest_articles %}
  <a href="{{ article.url }}">
    <div>
      <img src="{{ article.image }}"alt="{{ article.alt}}"><p>{{ article.title}}</p>
    </div>
  </a>
{% endfor %}

まとめ

「【Django】定数の設定方法(最新記事を定数で設定・表示する)」はいかがでしたでしょうか?

定数を設定できるようになると、最新記事だけでなく、WEBアプリ作成時など様々なことで利用することができます。

定数の使い方をマスターして、よりよい物が作れるようになりましょう。