Flaskでsitemap.xmlの作成

ちょっとつまずいたのでメモしておきます。

今は、mongoの薄い本を見ながらFlaskのサンプルコード作成しておりまっす。
sitemap.xmlの表示について、ここ(http://flask.pocoo.org/snippets/108/)見ながらやってましたが、ちょっと違う…というか、Python初心者なので上のほうのimportとかも書いてくれないとエラーが出ちゃうし、エラーに???ってなるのでメモ。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, math, datetime
from datetime import timedelta, datetime, tzinfo, date, time
from flask import Flask, render_template, request, make_response
from flask.ext.pymongo import PyMongo
app = Flask(__name__)
app.debug = True
mongo = PyMongo(app)
@app.route("/")
def index():
return render_template('index.html', message="Hello")
@app.route("/about")
def about():
return render_template('about.html', message="Hello")
@app.route("/help")
def help():
return render_template('help.html', message="Hello")
@app.route('/hello/<name>')
def hello(name=''):
result = mongo.db.unicorns.update({"name": name}, {"name": name, "gender": "m", "home": "Arrakeen", "worm": False}, upsert=True)
return render_template('hello.html', name=name, id=result)
app.route('/unicorns')
def unicorns():
page = request.args.get('page', default=1, type=int)
page_size = request.args.get('page_size', default=5, type=int)
skip_size = page * page_size - page_size
unicorns_count = mongo.db.unicorns.count()
page_volume = int(math.ceil(unicorns_count / page_size))
unicorns = mongo.db.unicorns.find({}).sort("name", 1).skip(skip_size).limit(page_size)
return render_template('unicorns.html', unicorns=unicorns, unicorns_count=unicorns_count, page=page, page_size=page_size, page_volume=page_volume)
# a route for generating sitemap.xml
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
"""Generate sitemap.xml. Makes a list of urls and date modified."""
pages=[]
ten_days_ago = datetime.now()
# static pages
for rule in app.url_map.iter_rules():
if "GET" in rule.methods and len(rule.arguments)==0:
pages.append([rule.rule,ten_days_ago])
response = make_response(render_template('sitemap.xml', pages=pages))
response.headers["Content-Type"] = "application/xml"
return response
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run(port=port)

これで、templateにsitemap.xmlを置くと、今ここに定義している全ルートがサイトマップXMLに表示されるよ!

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in pages %}
<url>
<loc>{{page[0]|safe}}</loc>
<lastmod>{{page[1]}}</lastmod>
</url>
{% endfor %}
</urlset>
スポンサーリンク
hige1
hige1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
hige1