親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Djangoのadmin画面でSitesが表示されない


Djangoでデフォルトで使える管理画面

Djangoで開発をする方にはおなじみですが、
このフレームワークにはデフォルトで管理画面が使えるようになっています。
インストール直後にすぐ使えるもので、複雑な処理がなく、DBの構造もそれほど複雑ではない簡易的なサイトであれば十分機能要件を満たせると思います。

ただ、少し複雑になってしまうと、管理画面の構造を覚えることに多少時間がかかってしまったり、
やりたいことができないということも生じうるので、その場合は自分で管理画面を0から自作した方が良いと思います。

管理画面は

はじめての Django アプリ作成、その2 | Django documentation | Django

のページのチュートリアルを参考に進めると、
以下の画面のような画面に辿り着くため、ここでユーザ名とパスワードを入力すれば管理画面にログインできます。
※ユーザ名とパスワードの初期値については、チュートリアルを参考にしてくださいね。

f:id:tomotomo1129:20180512110730j:plain

管理画面の中身

ログインしてみると、

f:id:tomotomo1129:20180512110746j:plain

こんな感じでGroupsとかUsersの編集可能なコンテンツが表示されます。

ところが、参考にした某サイト情報では、Authの下にSitesとかいう欄も一緒に表示されるらしい。
僕が対応した時はなぜか表示されずに色々試行錯誤。
正直用途はわからないんですけどねw



表示されなかった原因と設定

原因は簡単でした。
settings.pyのINSTALLED_APPSにsitesが入っていないことが原因でした。
デフォルトでは、INSTALLED_APPSの設定値は以下のようになっています。
Djangoの勉強を始めた頃とかは、全ての内容がよくわからないと思うので、なんのこっちゃって感じですよね。

INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'polls',
 )

今回の対応では、上記を以下のように書き変えました。
変更点としては、「'django.contrib.sites',」という箇所を追記したのですがわかりますか?
下から2行目です。

INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'django.contrib.sites', # ここを追記しています。
     'polls',
 )

その後は、再度「python manage.py syncdb」を実行してデータベースと同期をとります。

python manage.py syncdb

ちなみにこの時「django_site」というテーブルが新たに作成されているはずなので、一度確認をしてください。

この状況で、サーバーを再起動させてみると...
Authの下にSitesが作成されています!

f:id:tomotomo1129:20180512111139j:plain

正直Sitesにどんなものがあるのかよくわかっていないのですがw
一応チュートリアルにあるのですがまだよくわかりませんでしたw

“sites” フレームワーク — Django v1.0 documentation

チュートリアルにも載っていることですし、いざ使う時に迷ったら困るので、備忘のためにも記しておきました。

Djangoの管理画面についてもっと勉強してこのあたりを使いこなせるようになると、何かアプリを作る時に便利なんでしょうね。
デフォルトで管理画面が付属しているなんてほんと便利です。
ちょっとデザインが古い感じがして抵抗があるのですが、せっかくの恩恵は受けた方がいいですよね。


Python Django 超入門

Python Django 超入門