admin管理サイトを使いたくなかったので、FlatPageを更新するスクリプトを作成した。
settings.pyでFlatPageを使用する設定をしておく。
http://docs.djangoproject.com/en/dev/ref/contrib/flatpages/#ref-contrib-flatpages
テンプレートは下記のような感じで作成しておく。
今回は、reST形式のコンテンツを使用する。
project_home/templates/flatpages/default.html
{% load markup %} <html> <head> <title>{{ flatpage.title }}</title> </head> <body> {{ flatpage.content|restructuredtext }} </body> </html>
project_home/text/あたりにreST形式のコンテンツファイルを作成しておく。
今回は説明系ページを作成するため、下記のようなファイルを作成した。
- about.rst
- privacy.rst
- release_notes.rst
- tou.rst
下記のような、ページタイトルとURLとファイルを関連づけるファイルを作る。
project_home/text/flatpages.json
[ {"pk":1, "title":"About Us", "url": "/support/about/", "file":"about.rst"}, {"pk":2, "title":"Privacy Policy", "url": "/support/privacy/", "file":"privacy.rst"}, {"pk":3, "title":"Release Note", "url": "/support/release_notes/", "file":"release_notes.rst"}, {"pk":4, "title":"Term of Use", "url": "/support/term_of_use/", "file":"tou.rst"} ]
django APIを使用してFlatPageを登録するスクリプトを作成する。
project_home/scripts/update_flatpages.py
import os import sys HOME_PATH = "C:/workspace" # プロジェクト用ディレクトリ保存ディレクトリ sys.path.append(HOME_PATH) TEXT_DIR_PATH = os.path.join(HOME_PATH, "project_home/text") FLATPAGE_SETTING_FILE_PATH = os.path.join(TEXT_DIR_PATH, "flatpages.json") from django.core.management import setup_environ from project_home import settings setup_environ(settings) from django.core.exceptions import ObjectDoesNotExist from django.contrib.flatpages.models import FlatPage from django.utils import simplejson from django.contrib.sites.models import Site def main(): setting_file = open(FLATPAGE_SETTING_FILE_PATH) flatpage_settings = simplejson.load(setting_file) setting_file.close() for page in flatpage_settings: try: flatpage = FlatPage.objects.get(url=page["url"]) except ObjectDoesNotExist: flatpage = FlatPage() flatpage.url = page["url"] flatpage.save() flatpage.sites.add(Site.objects.get(name="ドメイン名")) flatpage.title = page["title"] f = open(os.path.join(TEXT_DIR_PATH, page["file"])) flatpage.content = f.read() f.close() flatpage.enable_comments = False flatpage.template_name = "" flatpage.registration_required = False flatpage.save() print "Saved %s" % (page["title"],) if __name__ == '__main__': main()