Google App Engine用フレームワーク「Kay」のフォームを使うときの注意点
Google App Engine用フレームワーク「Kay」ではcallタグを使用して、フォームの表示をカスタマイズすることができます。
{% call form() %}
{{ form.message.errors()|safe }}
{{ form.message.label()|safe }}
{{ form.message.render()|safe }}
{% endcall %}
ところが、一部のプロパティ名ではエラーになってしまいます。
たとえば次のコード。
from kay.utils import forms
class MyForm(forms.Form):
name = forms.TextField()
{% call form() %}
{{ form.name.label()|safe }}
{{ form.name.render()|safe }}
{{ form.name.errors()|safe }}
{% endcall %}
このコードを実行すると、次のエラーメッセージが表示されます。
UndefinedError: ‘label’ is undefined
nameプロパティの名前を変更すると、エラーは発生しません。
どうやらnameプロパティは使用できないようです。
他にも使用できない名前があるようです。(要調査)
2010年6月6日追記
新しいカスタマイズの方法が導入されました。
この方法なら、属性名による問題は起きません。
{% call form() %}
{{ form['name'].label()|safe }}
{{ form['name'].render()|safe }}
{{ form['name'].errors()|safe }}
{% endcall %}
昨日、丁度同じところではまりました。
dir(XXForm..as_widget())を見ると
‘all_errors’, ‘as_dd’, ‘as_dl’, ‘csrf_token’, ‘default_actions’, ‘disable_dt’, ‘errors’, ‘get_hidden_fields’, ‘help_text’, ‘hidden’, ‘hidden_fields’, ‘id’, ‘is_multipart’, ‘label’, ‘localname’, ‘name’, ‘needs_multipart_form’, ‘render’, ‘value’
が使われています(アンダースコアで始まるメソッドは除く)。
まあ「name」以外はあまりプロパティになりそうな単語ではなさそうですが、
落とし穴にはまる人は多いでしょうね。
コメントありがとうございます。
私は「name」の他に「label」でもはまりました。