今回からチュートリアル2に突入
http://www.djangoproject.jp/doc/ja/1.0/intro/tutorial02.html#intro-tutorial02
ちなみにもうハマってはいませんが、あえて当時の内容のままで残しておきます。
ちなみに自分の環境ではpythonが2.7.5、DJangoは1.6です。
adminページを使用する
まずはsettings.pyを確認
settings.py
# この部分
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
を実行。アプリケーションを追加したらデータベースも追加するのがセオリーっぽい。
次にurls.pyを編集。ここでちょっと困ったことになった。
urls.py
チュートリアルでは
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/(.*)', admin.site.root),
)
という風に記述しているのでとりあえずその通りにして、
python manage.py runserver
この後 http://127.0.0.1:8000/admin/ に行けばログイン画面が表示されるはずだった。
しかし、結果はエラー。メッセージは
ImportError at /admin/
No module named defaults
バージョンの違いのせいかもしれないと思い(チュートリアルは1.0を想定しているが自分は1.6なので)、編集前の状態に戻してみる。実は編集する前から以下のようなそれらしい記述があった。
from django.conf.urls import patterns, include, url # デフォルトで入っていたimport文
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'myDj.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)), # どの例も()の前にurlが付いている
)
やっていることは同じに見えるのでおそらく書き方が変わったのだろうと考え、起動してアクセス。
が、またしても駄目。ただしエラーメッセージはさっきと違う。
ImproperlyConfigured at /admin/
You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.
よく分からない。
「サイトIDを設定しろ」と言われているのは何となく理解できるものの、それって一体どうやるの?
エラーメッセージでググっても今ひとつピンと来ないし
苦肉の策で今度は間を取った書き方をしてみた。
from django.conf.urls import patterns, include, url # ここは失敗しないほうを採用
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# デフォルトの記法 url(r'^admin/', include(admin.site.urls))
# チュートリアルの記法 (r'^admin/(.*)', admin.site.root)
url(r'^admin/(.*)', include(admin.site.root))
すると、
AttributeError at /admin/
'AdminSite' object has no attribute 'root'
以上が当時の内容です。
現在はコメントのおかげで解決しました(投稿してよかった)。