Google App Engine用フレームワーク「Kay」のフォームを使うときの注意点

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 %}

コメント

  1. 昨日、丁度同じところではまりました。

    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」以外はあまりプロパティになりそうな単語ではなさそうですが、
    落とし穴にはまる人は多いでしょうね。

  2. コメントありがとうございます。
    私は「name」の他に「label」でもはまりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です