【问题标题】:How can I add a class attribute to all my forms widgets automatically in Django?如何在 Django 中自动为我的所有表单小部件添加类属性?
【发布时间】:2020-01-12 07:19:52
【问题描述】:

我希望每次使用 django 创建表单时,标签输入都包含一个特定的 css 类(表单控件),为此我必须在 form.py 中编写以下代码,为每个字段添加行:

class InsertItem(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].widget.attrs.update({'class': 'form-control'})
        self.fields['price'].widget.attrs.update({'class': 'form-control'})

有没有办法强制 Django 在每个表单中包含我需要的 css 类,而不必为每个 from 和每一行编写这些东西?

【问题讨论】:

    标签: python css django forms


    【解决方案1】:

    编写一个更新每个字段的通用基类:

    class StylishForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            for field in self.fields.values():
                field.widget.attrs.update({'class': 'form-control'})
    

    并从中继承:

    class InsertItem(StylishForm):
       ...
    

    【讨论】:

    • 我现在正在学习django/python,所以我不明白,难道BaseForm不是django中包含的“默认”类吗?所以你建议覆盖 BaseForm?
    • 随便叫什么;我已经更新了名字。关键是您继承自它而不是基本的 ModelForm。
    【解决方案2】:

    我正在使用django-widget-tweaks 应用程序添加类属性。

    1. install申请
    2. 创建form 只是modelForm
    class InsertItem(forms.ModelForm):
        class Meta:
            model = modelName
    
    1. 在模板代码中使用应用程序
    {% load widget_tweaks %}
    
    <form method="post">
    {% csrf_token %}
    {% for field in form %}
        {% render_field field class="form-control" %}
    {% endfor %}
    </form>
    

    {% load widget_tweaks %}:加载应用程序以使用它

    {% render_field:命令
    field:添加类的字段名称
    class="form-control" %}:属性

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2011-02-24
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多