読者です 読者をやめる 読者になる 読者になる

ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

管理ページを使わずにFlatPageを更新する

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()