2016年5月6日金曜日

GAE で、Django/Sitemaps を使う。

こちらの続きです。
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 件のコメント:

コメントを投稿