Если я вас хорошо понял, вы хотите автоматически сгенерированный html от django для поля status
?Тогда это очень просто:
{{ form.status }}
Несколько лишних слов:
Форма - это объект, похожий на диктовку, где к полям можно получить доступ следующим образом:
>>> form['field_name']
Объявленные поля хранятся в form.fields
, SortedDict объекте.Таким образом, вы можете использовать эту переменную для доступа к полям, однако рекомендуемый способ всегда самый короткий.
Если вы новичок в Python, вам может быть интересно, как это так, что вы объявляете поля как атрибуты, однако вы неполучить доступ к ним из кода Python следующим образом:
>>> form.field_name
AttributeError: 'Form' object has no attribute 'field_name'
Ну, это потому, что классы в Python не являются статичными, мета-класс может использоваться для создания всех видов новых вещей из определения класса.Django использует его для создания дружественного API.В основном это выглядит так:
- Интерпретатор Python анализирует ваш класс Form.
- Интерпретатор находит атрибут
__metaclass__
, который унаследован от django.forms.Form
и имеет значение: DeclarativeFieldsMetaclass . - Метакласс реструктурирует ваш класс.Атрибуты удаляются и создается атрибут
.base_fields
. - Почему
base_fields
не fields
?Ну, это другая история, это связано с тем, как поля, полученные из моделей в ModelForm, отделены от полей, объявленных в классе формы.
Но не путайте метаклассы с class Meta
, который иногда используетсячтобы предоставить дополнительные параметры конфигурации для вашей формы или модели.
Назад к шаблонам сейчас.Вы не можете получить доступ к form.field_name
из кода Python, почему тогда это возможно в шаблоне?Как описано в документации django , когда система шаблонов обнаруживает точку, она пытается выполнить следующие операции поиска в следующем порядке:
- Поиск по словарю
- Поиск по атрибутам
- Вызов метода
- Поиск по индексу списка
Это означает, что система шаблонов первым делом попытается вернуться при обнаружении: {{ form.field_name }}
is: form['field_name']
.