http://yamayoshi.blogspot.jp/2016/05/gaep-django18-djangae.html
http://yamayoshi.blogspot.jp/2016/05/djangae-ndb.html
GAE のデータベース(NDB)は、Django のモデルを使えないので、当然、サイトマップフレームワーク(Sitemaps)も使えません。
でも、djangae によって、この問題を解決出来そうです。
こちらを参考に。
https://docs.djangoproject.com/en/1.8/ref/contrib/sitemaps/
1.概要
・設定ファイルにフレームワーク(SitesとSitemaps)を追加
・サイトマップクラスの作成
・URLディスパッチャーの設定
・サイトIDの生成
・設定ファイルに SITE_ID を追加
・サイトマップを確認
2.コード
2-1.設定ファイルにフレームワーク(SitesとSitemaps)を追加
$ cd ~/gae/project
$ nano mysite/settings.py
--
INSTALLED_APPS = (
〜
'home',
'django.contrib.sites', #追加
'django.contrib.sitemaps', #追加
)
--
2-2.サイトマップクラスの作成 (新規)
$ nano home/sitemaps.py
--
# encoding: UTF-8
from django.contrib.sitemaps import Sitemap
from .models import *
class IndexSitemap(Sitemap):
def items(self):
return ['index']
def location(self, obj):
return '/'
class LinkSitemap(Sitemap):
limit = 10
def items(self):
return Link.objects.all()
--
※ LinkSitemap クラスで、Link モデルからデータを読みだします。
2-3.URLディスパッチャーの設定
$ nano mysite/urls.py
--
# encoding: UTF-8
from django.conf.urls import include, url
from django.contrib import admin
from home import views
from django.contrib.sitemaps import views # Sitemapsのビュー
from home import sitemaps as hs
sitemaps = {
'index': hs.IndexSitemap,
'links': hs.LinkSitemap, # home/sitemaps の LinkSitemap クラス
}
urlpatterns = [
url(r'^', include('home.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^sitemap\.xml$', views.index, {'sitemaps': sitemaps}),
url(r'^sitemap-(?P<section>.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}),
]
--
3.サイトIDの生成
開発用サーバを起動
$ python ../google_appengine/dev_appserver.py ./
ブラウザで、adminページにアクセス
=> http://localhost:8080/admin/
サイトを登録
Site -> Add で、Domain name と Display name を入力 -> Save
SDK のコンソールにアクセス
=> http://localhost:8000/
Datastore Viewer -> Entity Kind「django_site」を選択 -> ListEntities
ID を確認します。
4.設定ファイルに サイトID を追加
$ nano mysite/settings.py
--
DEBUG = True
SITE_ID = xxxxxxxxxxxxxxxxxx #追加
--
5.サイトマップを確認
ブラウザで、サイトマップにアクセス
=> http://localhost:8080/sitemap.xml
6.所感
サイトマップフレームワークは、sitemap.xml をインデックスとして、複数のサイトマップを自動生成してくれます。
これが、本当にすばらしいと思います。
ちょっと悩んだのは、SITE_ID...
admin ページで入力して、SDK のコンソールで ID を確認するってのがミソ。
最初、なにげなく「1」と入れたら、アッサリとエラーで弾かれ.. 汗汗。
さて、動作確認は、ここまでとして、以前作ったものを Django1.8+djangae に移行したいと思います。
0 件のコメント:
コメントを投稿