【问题标题】:Access form field attributes in templated Django访问模板化 Django 中的表单字段属性
【发布时间】:2012-06-05 23:52:04
【问题描述】:

我一直在用 django 做一些自定义表单,但我不知道如何访问特定表单字段通过 forms.py 附加的属性。

def putErrorInTitle (cls):
init = cls.__init__

def __init__ (self, *args, **kwargs):
    init(self, *args, **kwargs)
    if self.errors:
        for field_error in self.errors:
            self.fields[field_error].widget.attrs['title'] = self.errors[field_error][0]
            self.fields[field_error].widget.attrs['class'] = "help_text error_field"

cls.__init__ = __init__
return cls

这就是我将属性附加到字段的方式。

<dl class="clearfix two">
 <dd>
  <label for="id_diagnosis">Diagnostico:</label>
   <select class="{{form.id_diagnosis.class}}" id="id_equipment_activity-{{ forloop.counter0 }}-id_diagnosis" name="equipment_activity-{{ forloop.counter0 }}-id_diagnosis">
    {% for x,y in form.fields.id_diagnosis.choices %}
    <option value="{{ x }}" {% ifequal form.id_diagnosis.data|floatformat x|floatformat %}selected="selected"{% endifequal %}>{{ y }}</option>
    {% endfor %}
    <option value="1000" {% ifequal form.id_diagnosis.data|floatformat '1000'|floatformat %}selected="selected"{% endifequal %}>Otro</option>
   </select>
 </dd>
 <dd class="vertical_center" id="optional_diagnosis"><label for="optional_diagnosis">Diagnostico opcional:</label>{{ form.optional_diagnosis }}</dd>
</dl>

我一直在尝试访问它的属性:

class="{{form.id_diagnosis.class}}", class="{{form.id_diagnosis.widget.class}}"

而且我似乎没有找到关于什么可访问和什么不可访问的明确文档。真的,我宁愿拥有老式文档而不是 django “友好”的文档

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    在其他情况下,设置和获取字段属性可能很有用。

    在表单的初始化函数中设置:

    self.fields['some_field'].widget.attrs['readonly'] = True
    

    ...并在模板中访问它:

    {{ form.some_field.field.widget.attrs.readonly }}
    

    【讨论】:

      【解决方案2】:

      您似乎只想为每个字段显示表单错误。 在视图中清理或验证表单后,字段应包含 错误消息。这样您就可以像这样在模板中显示它们:

      <form action='.' method='post'>
          ...
          <div class='a-field'>
             {{ form.field_1.errors|join:", " }}
             {{ form.field_1.label_tag }}
             {{ form.field_1 }}
          </div>
          ...
      </form>
      

      但是,如果您真的想显示表单字段属性,那么您 可以试试这样的:

      {{ form.field_1.field.widget.attrs.maxlength }}
      

      【讨论】:

      • 感谢您建议他走 .errors 路线但仍然回答问题。
      【解决方案3】:

      上面的答案是正确的,但是,我想为那些在循环中访问表单字段的人添加一个注释。

      如果你在这样的循环中这样做

      {% for field in form %}
          {{ field.field.widget.attrs.placeholder }} # field.field is the key here
      {% endfor %}
      

      【讨论】:

        猜你喜欢
        • 2022-07-17
        • 1970-01-01
        • 2018-01-17
        • 2014-06-10
        • 2012-11-08
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多