django-siteforms
Приложение для Django, расширяющее возможности по работе с формами.
Репозиторий: https://github.com/idlesign/django-siteforms
Автор:
Игорь Стариков
Особенности:
Стили, доступные из коробки:
Пример использования:
За более подробным описанием и примерами обратитесь к документации (англ.).
- Поддержка отрисовки полной формы (включая пролог и кнопку отправки);
- Поддержка вложенных форм (представьте вложенную форму полем основной);
- Группировка полей;
- Декларативный стиль описания атрибутов для элементов формы:
- Декларативное описание раскладки формы с поддержкой упорядочивания полей;
- Поддержка Aria (Accessible Rich Internet Applications);
Стили, доступные из коробки:
- Без CSS
- Bootstrap 4
Пример использования:
from django.shortcuts import render
from siteforms.composers.bootstrap4 import Bootstrap4, FORM, ALL_FIELDS
from siteforms.toolbox import ModelForm
class MyForm(ModelForm):
"""Демонстрация работы siteforms."""
disabled_fields = {'somefield'} # Один из способов отключения полей.
hidden_fields = {'otherfield'} # Один из способов спрятать поля.
class Composer(Bootstrap4):
"""Так говорим, что компоновать форму нужно под Bootstrap 4.
Внутри этого класса можно произвести дополнительные настройки,
если требуется.
"""
opt_size='sm'
# Bootstrap 4 поддерживает размеры полей ввода. Деламе поля маленькими.
# Атрибуты элементов (полей, груп, форм, пр.) можно задать в attrs.
# Добавим атриут rows=2 полю contents нашей модели.
attrs={'contents': {'rows': 2}},
# Определить группы элементов можно так:
groups={
'basic': 'Базовые поля',
'other': 'Прочие поля',
},
# А так можно влять на раскладку полей на странице:
layout = {
FORM: {
'basic': [ # Сначала выведем группу basic.
['title', 'date_created'], # Поместим эти два поля в один ряд.
'contents', # Это поле поместим в отдельный ряд формы.
],
# Остальные поля поместим в группу other.
'other': ALL_FIELDS,
}
}
class Meta:
model = MyModel # Допустим модель у нас уже есть.
fields = '__all__'
def my_view(request):
# Инициализируем форму данными из POST.
my_form = MyForm(request=request, src='POST')
is_valid = form.is_valid() # Валидируем.
return render(request, 'mytemplate.html', {'form': my_form})
За более подробным описанием и примерами обратитесь к документации (англ.).
На заметку
В соответствующем разделе вы можете зарегистрировать сообщество по интересам, чтобы о нём узнали и другие посетители сайта — возможно, так вы отыщите новых единомышленников и друзей.. И не важно виртуальное оно, или вполне реальное, давно существующее, или только-только придуманное.