2011年4月2日

Google App EngineでDjango 1.2を使う準備

 ひさしぶりにGAEを弄っていたらこんな警告ログを発見しました。 近々Djangoフレームワークのデフォルトバージョンが変わる予定なので、今まで何気なくDjango 0.96を使っていた人はuse_library()関数でバージョンを明示してくださいという話らしい。 (;゚Д゚)(゚Д゚;(゚Д゚;)ナ、ナンダッテー!!

You are using the default Django version (0.96). The default Django version will change in an App Engine release in the near future. Please call use_library() to explicitly select a Django version.

 それでDjango 0.96の他には何が使えるのかというと、Django 1.2、Django 1.1、Django 1.0があると書いてあります。 先日Django 1.3がリリースされたので、それもそのうち使えるようになるでしょう。

ただしGoogle App EngineのSDKにはDjango 0.96とDjango 1.2しか含まれていないため、ローカルのテスト環境を構築する際には追加の作業が必要です。

■ Django 0.96からDjango 1.2への移行
 では「少ない手間で新しいものを」という自分方針に則って、自作アプリをDjango 1.2に移行させてみます。 方法はDjangoを使用しているPythonスクリプトに次の2行を書き足すだけです。
from google.appengine.dist import use_library
use_library('django', '1.2')

 webapp.template.django.VERSIONの値を表示して動作しているDjangoのバージョンを確認してみてください。 SDK 1.4.3では「(1, 2, 5, 'final', 0)」と出ました。 バージョン情報は文字列でなくタプルです。

Traceback (most recent call last):
 ・・・
 File "C:\Program Files\Google\google_appengine\google\appengine\dist\_library.py", line 194, in CheckInstalledVersion(name, desired_version, installed_version))
UnacceptableVersionError: django 1.2 was requested, but 0.96.4.None is already in use

 もしこんなエラーが出たときはuse_library()をスクリプトのもっと上の方に書いてください。 バージョンを指定する前にwebapp.templatedjango.utilsなどをインポートすると、現在のデフォルトであるDjango 0.96が動作してしまいます。


■ テンプレートタグやフィルタのパッケージ化
 自作のフィルタをmyfilters.pyというファイルに書いて他のスクリプトと一緒に置いてあったのですが、Django 1.2に変えたらエラーが起きてしまいました。

Traceback (most recent call last):
 ・・・
 File "C:\Program Files\Google\google_appengine\lib\django_1_2\django\template\__init__.py", line 984, in import_library
  app_path, taglib = taglib_module.rsplit('.',1)
ValueError: need more than 1 value to unpack

 何か文字列を「.」で分割しようとしているらしい。 エラー元はこちらのコード。 「myfilters」の前に「.」が無いからエラーになったわけですね。
template.register_template_library('myfilters')

 「myfilters」の前に「.」が入る状況というのは、Python的にパッケージ
ことでしょう。 そこでtemplatetagsというフォルダを新たに作ってmyfilters.pyを移動しました。 パッケージなので__init__.pyファイルも作成します。 初期化処理は特にないのでコメントだけ書いておきます。

自作フィルタの登録方法は次のようになりました。 m9(・∀・)ビシッ!!
template.register_template_library('templatetags.myfilters')

【関連記事】

0 件のコメント:

コメントを投稿