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.templateやdjango.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 件のコメント: