【问题标题】:How to add CSS classes to Django Built-in forms如何将 CSS 类添加到 Django 内置表单
【发布时间】:2017-04-12 19:17:38
【问题描述】:

我正在使用Django Built-in forms,更准确地说是 PasswordChangeForm。

它可以完美运行,直到我希望它看起来像网站的其余部分(引导程序)。 我按照answer 中的方法继承了该类并自己构建了一个新的:

class PasswordChangeCustomForm(PasswordChangeForm):
    old_password = CharField(required=True,
                  widget=PasswordInput(attrs={
                    'class': 'form-control'}))

    new_password1 = CharField(required=True,
                  widget=PasswordInput(attrs={
                    'class': 'form-control'}))

    new_password2 = CharField(required=True,
                  widget=PasswordInput(attrs={
                    'class': 'form-control'}))

但是重复所有这些代码让我很烦。 有没有另一种方法来实现同样的事情(将form-control 类添加到每个字段)而不重写每个字段?

【问题讨论】:

    标签: django twitter-bootstrap django-forms


    【解决方案1】:

    为了不重写字段,我发现我可以简单地更新小部件:

    class PasswordChangeCustomForm(PasswordChangeForm):
        def __init__(self, user, *args, **kwargs):
            super(PasswordChangeCustomForm, self).__init__(user, *args, **kwargs)
            self.fields['old_password'].widget.attrs.update({'class': 'form-control'})
            self.fields['new_password1'].widget.attrs.update({'class': 'form-control'})
            self.fields['new_password2'].widget.attrs.update({'class': 'form-control'})
    

    对于 Bootstrap(所有字段都需要 form-control 类)特别有用的是来自 @daniel-roseman 的 answer

    class PasswordChangeCustomForm(PasswordChangeForm):
        def __init__(self, user, *args, **kwargs):
            super(PasswordChangeCustomForm, self).__init__(user,*args, **kwargs)
            for field in self.fields:
                self.fields[field].widget.attrs['class'] = 'form-control'
    

    【讨论】:

      【解决方案2】:

      您可以更进一步地编写代码并自动更新所有小部件:

      super(PasswordChangeCustomForm, self).__init__(*args, **kwargs)
      for field in self.fields.values():
          field.widget.attrs['class'] = 'form-control'
      

      【讨论】:

      • 您的代码给出了 AttributeError 'str' object has no attribute 'widget'。我自己解决了。
      猜你喜欢
      • 2018-03-16
      • 2013-08-04
      • 2019-06-17
      • 2016-01-09
      • 1970-01-01
      • 2018-07-12
      • 2017-09-18
      • 2020-12-21
      • 2018-08-23
      相关资源
      最近更新 更多