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
リンク元
- 9 http://www.google.com/reader/view/
- 8 http://d.hatena.ne.jp/keyworddiary/Erlang
- 7 http://d.hatena.ne.jp/keyworddiary/Common Lisp
- 7 http://d.hatena.ne.jp/keyworddiary/Python
- 6 http://d.hatena.ne.jp/keyword/lisp
- 6 http://r.hatena.ne.jp/esper/知り合い/
- 6 http://reader.livedoor.com/reader/
- 5 http://d.hatena.ne.jp/keyword/Erlang
- 4 http://d.hatena.ne.jp/asin/4894714337
- 4 http://d.hatena.ne.jp/johzan/20080623/1214157598