Какой самый быстрый способ стилизовать поля формы модели django по одному
У меня есть ModelForm
, который успешно рендерится.
это моя forms.py форма
class UploadPostsForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'description', 'date', 'file']
вот как это выглядит в templates
Я хочу, чтобы он выглядел как ниже, используя bootstrap5
какой самый быстрый и простой способ сделать это? Я нашел три способа.
1. добавление пользовательских тегов шаблонов
from django import template
register = template.Library()
@register.filter(name='addclass')
def addclass(value, arg):
return value.as_widget(attrs={'class': arg})
{% load myfilters %}
<form action="/contact/" method="post">
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.subject.errors }}
{{ form.subject.label_tag }}
{{ form.subject|addclass:'MyClass' }}
<span class="helptext">{{ form.subject.help_text }}</span>
</div>
</form>
2. определение стилей в каждом поле формы или во всех сразу
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
widgets = {
'myfield': forms.TextInput(attrs={'class': 'myfieldclass'}),
}
3. переопределение __init__
метода
super(MyForm, self).__init__(*args, **kwargs)
self.fields['myfield'].widget.attrs.update({'class': 'myfieldclass'})
как лучше всего это сделать?
django-crispy-forms
может решить эту проблему. Он позволит вам контролировать поведение рендеринга ваших Django форм очень элегантным и DRY способом.
Repo: https://github.com/django-crispy-forms/django-crispy-forms.
Простой учебник: https://simpleisbetterthancomplex.com/tutorial/2018/11/28/advanced-form-rendering-with-django-crispy-forms.html