GoogleAppEngine でページ作ってるときに、文字列を URLencode で表示したい場所があったので、Django のテンプレートのドキュメント通りに {{ hoge|urlencode }} と記述したのだが
KeyError: u'\u614c'
などとエラーを出して終了してしまう。
どうすりゃいいんだ?と思って調べてみるとどうやらカスタムフィルターを作れば良いらしい。
というわけで以下のエントリーを参考に(コピーして)解決しました。thank you.
random thoughts...: Django template urlencode unicode characters (Google App Engine)
以下手順和訳
1) GAEアプリケーションのディレクトリ直下に customtags という名前でディレクトリを作成
2) customtags の中に __init__.py 及び xss.py の2ファイルを作成する。 __init__.py は編集しないけど空のファイルのまま放置でおk。
3) xss.py を以下の様に編集。
import types
import urllib
from django import template
register = template.Library()
@register.filter
def unicode_urlencode(value):
if type(value) is types.UnicodeType:
return urllib.quote(value.encode("utf-8"))
else:
return urllib.quote(value)
4) GAE のスクリプトの上部 import の下へ以下のコードを追加。
webapp.template.register_template_library("customtags.xss")
これで準備完了。
あとはテンプレートで urlencode したい箇所を
{{ hoge|unicode_urlencode }}
と記述すればおk
何か勘違いしているような気もするがとりあえずメモ