【问题标题】:django model forms fields template drydjango 模型 表单 字段 模板 干
【发布时间】:2017-10-31 09:12:49
【问题描述】:

我们有一个 django 应用程序,其中包含大量带有通用模板的表单,用于呈现所有表单字段。这是一个此类表单模板的示例。

{% for field in form %}
{% include "templates/_pratial/_field.html %}
{% endfor %}

_field.html

<div class="form-group">
    {{ field }}
  </div>

forms.py

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].widget.attrs.update({'class' : 'form-control'})

现在我们正在用新的 html 更新我们的布局,我们的表单现在应该是这样的

<div class="form-group ">
  <label class="control-label" for="email">
   {{ field.label }}
  </label>
  <div class="input-group">
   <div class="input-group-addon">
    <i class="{{ field.?? }}"></i>  //fa fa-envelope-o
   </div>
   {{ field }}
  </div>
 </div> 

如何动态插入fa fa-envelope-o,而不破坏dry

类似的东西

self.fields['myfield'].icon = "fa fa-envelope-o"

在表单初始化中,可以很容易地在模板中使用,例如 {{ field.icon }}

【问题讨论】:

标签: django


【解决方案1】:
class MyNewCharField(forms.CharField):
    def __init__(self, my_class=None, **kwargs):
        super(MyNewCharField, self).__init__(**kwargs)
        self.my_class_name = my_class_name

您可以继承要创建新字段的表单字段,并添加一个附加属性,如上例所示的“my_class”,并在表单init本身中初始化class_name。

【讨论】:

  • thnx 但是项目中使用的总字段超过 1k 我无法全部覆盖它们
  • 无论如何,您都必须为所有这些 1k 字段指定类名,对吧?我的意思是,您可以使用自定义字段,而不是在需要时使用字段中的 django,并在表单 init 本身中指定 class_name。
猜你喜欢
  • 1970-01-01
  • 2012-03-02
  • 2020-11-30
  • 2013-07-17
  • 2013-08-27
  • 2015-08-19
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多