Предположим, у меня есть форма
class SampleClass(forms.Form):
name = forms.CharField(max_length=30)
age = forms.IntegerField()
django_hacker = forms.BooleanField(required=False)
Есть ли способ для меня определить классы CSS для каждого поля, чтобы я мог использовать jQuery на основе класса в моей отрисованной странице?
Я надеялся, что не придется вручную создавать форму.
python
django
django-forms
ashchristopher
источник
источник
Ответы:
Еще одно решение, которое не требует изменений в коде Python и поэтому лучше для дизайнеров и одноразовых презентационных изменений: django-widget-tweaks . Надеюсь, кто-нибудь найдет это полезным.
источник
Ответил на мой собственный вопрос. Вздох
http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs
Я не понял, что это было передано в конструктор виджетов.
источник
Вот еще одно решение для добавления определений классов к виджетам после объявления полей в классе.
источник
Используйте django-widget-tweaks , он прост в использовании и работает довольно хорошо.
В противном случае это можно сделать с помощью пользовательского шаблона фильтра.
Учитывая, что вы делаете свою форму таким образом:
form.subject является экземпляром BoundField, который имеет метод as_widget .
Вы можете создать собственный фильтр "addcss" в "my_app / templatetags / myfilters.py"
А затем примените свой фильтр:
Form.subjects будет отображаться с классом «MyClass».
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ 1
Обновить фильтр в соответствии с ответом dimyG
Добавить ссылку на django-widget-tweak
РЕДАКТИРОВАТЬ 2
источник
get('class', None).split(' ')
потерпит неудачу , если тег никак не имеет атрибута класса, какNone
возвращаются.get('class', '').split(' ')
Расширяя метод, указанный на docs.djangoproject.com:
Я подумал, что сложно знать собственный тип виджета для каждого поля, и подумал, что забавно переопределить значение по умолчанию, просто поместив имя класса в поле формы. Кажется, это работает для меня:
Это кажется немного чище для меня.
источник
Если вы хотите, чтобы все поля в форме наследовали определенный класс, вы просто определяете родительский класс, который наследует
forms.ModelForm
, а затем наследует от него.Это помогло мне
'form-control'
автоматически добавить класс во все поля всех форм моего приложения, не добавляя репликацию кода.источник
Вот простой способ изменить вид. добавьте ниже в поле зрения перед передачей в шаблон.
источник
Просто добавьте классы в форму следующим образом.
источник
Вот вариант выше, который даст всем полям один и тот же класс (например, jquery nice закругленные углы).
источник
Вы можете попробовать это ..
Вы можете увидеть больше информации в: Django Widgets
источник
Если вы хотите добавить класс в поле формы в шаблоне (не в view.py или form.py), например, в случаях, когда вы хотите изменить сторонние приложения без переопределения их представлений, тогда фильтр шаблона, как описано в Charlesthk ответить очень удобно. Но в этом ответе фильтр шаблона переопределяет любые существующие классы, которые может иметь поле.
Я попытался добавить это как редактирование, но это было предложено написать как новый ответ.
Итак, вот тег шаблона, который учитывает существующие классы поля:
источник
Оказывается, вы можете сделать это в конструкторе формы ( функция init ) или после того, как класс формы был инициирован. Это иногда требуется, если вы не пишете свою собственную форму, и эта форма приходит откуда-то еще -
источник
Вы также можете использовать Django Crispy Forms , это отличный инструмент для определения форм на случай, если вы захотите использовать некоторые CSS-фреймворки, такие как Bootstrap или Foundation. И там легко указать классы для полей формы.
Ваш класс формы хотел бы это тогда:
источник