最新の日記 記事一覧 ユーザー登録 ログイン ヘルプ

とある誰かの覚え書き このページをアンテナに追加 RSSフィード

2008-06-22

djangoのsitemapフレームワークの使い方 その2

前回の続きです。

ショートカットを使ってSitemapを定義する

djangoには、Sitemap作成のショートカットとして2つのクラスが用意されています。

・GenericSitemap
・FlatPageSitemap

これらの使い方について、詳しく見ていきます。

GenericSitemap

動的なページ用のSitemapを表現するクラスです。Sitemapのサブクラスの代用として使える反面、細かい部分のカスタマイズには向いていません。

以下のようにして利用します。

1. urls.pyに以下の定義を追加する
from contents.sitemaps import *
from django.contrib.sitemaps import *

# info_dictに指定できるのは、下記の2つのみ
info_dict = { 
 "queryset" : News.objects.all(),
 # date_fieldに割り当てるモデルのプロパティ名を指定する
 "date_field" : 'update_date'}

# priorityとchangefreqの値は全体で共有される。
# 個別にカスタマイズしたい場合は、Sitemapのサブクラスを定義して使うべき。
sitemaps = {'news':GenericSitemap(info_dict, priority=0.6, changefreq="weekly")}

urlpatterns = patterns('',
     ...
     ...
     (r'^sitemap.xml$','django.contrib.sitemaps.views.sitemap', {'sitemaps' : sitemaps})
)

2. モデルにget_absolute_urlを定義する

GenericSitemapにはlocationを指定する項目がありません。そのため、querysetの対象となるオブジェクトのget_absolute_urlからロケーションの取得を行います。get_absolute_urlには例えば以下のような内容を記述します。

def get_absolute_url(self):
  return "/" + str(self.id) + "/"

3. sitemapにアクセスする

http://<サーバー名>/sitemap.xmlアクセスすると、以下のようなXMLが返ってきました。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://example.com/1/</loc>
      <lastmod>2008-06-22</lastmod>
      <changefreq>weekly</changefreq>
      <priority>0.6</priority>
  </url>
</urlset>

FlatPageSitemap

静的なページ用のSitemapを表現するクラスです。サポートしているプロパティはlocationのみです。

FlatPageミドルウェアインストールされていない環境では動作しませんので、ご注意ください。

とりあえず動かしてみる場合は、以下のようにしてください。

(FlatPageミドルウェアインストール済みの場合は、手順5以降が必要です)

1.settings.pyに以下の定義を追加する
TEMPLATE_LOADERS = (
    ...
    # 初期状態で追加されているので、意図的に消した場合のみ追加します
    'django.template.loaders.app_directories.load_template_source',
)

MIDDLEWARE_CLASSES = (
    ...
    ...
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' ,
)

INSTALLED_APPS = (
    ...
    'django.contrib.sites',
    'django.contrib.sitemaps',
    'django.contrib.flatpages' ,
)
2.syncdbでFlatPage用のテーブルを追加する
3. Adminインタフェースを使って、FlatPageの内容をDBに保存する
4. TEMPLATE_DIRS以下にfaltpages/default.htmlを作成し、以下の内容を記述する
<h1>{{flagpage.title}}</h1>
<hr/>
<p>{{flatpage.content}}</p>
5. urls.pyに以下の内容を記述する
from django.contrib.sitemaps import *
sitemaps = {'flatpages':FlatPageSitemap}
urlpatterns = patterns('',
     ...
     ...
     (r'^sitemap.xml$',
      'django.contrib.sitemaps.views.sitemap', 
      {'sitemaps' : sitemaps})
)

6. sitemapにアクセスする

http://<サーバー名>/sitemap.xmlアクセスすると、以下のようなXMLが返ってきました。

確かにlocationの情報しかありませんね。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
     <loc>http://example.com/test/</loc>
  </url>
</urlset>
トラックバック - http://d.hatena.ne.jp/aqvi/20080622/1214124296