Python では、form
という名前のフィールドを持つ Django フォームがある場合、属性アクセス構文を使用してフィールドにアクセスfoo
することはできません。form.foo
代わりに を使用する必要がありますform.fields['foo']
。
ただし、テンプレートでは、テンプレート内{{ form.foo }}
の任意のオブジェクトに対して機能する通常の属性アクセス構文を使用して、フィールドをレンダリングするために使用できます (通常は使用します)。
{{ form.foo }}
Pythonform.foo
が機能しないのに、なぜ/どのようにテンプレートが機能するのですか? テンプレートをレンダリングするときに Django が行うのは少し特別な処理ですか? それとも単純なことを誤解しているだけですか?
編集: Django のテンプレート言語は Python ではなく、Python とは多くの違いがあることを知っています。なぜ{{ form.foo }}
構文が機能するのか、および/またはフォームの場合にどのように実装されるのかに興味があります。結局のところ、通常、テンプレートの{{ object.attribute }}
構文は Python のobject.attribute
構文と同じように機能しますが、フォームの場合は特殊なケースとして扱われるようです。