访问模板化 Django 中的表单字段属性
Posted
技术标签:
【中文标题】访问模板化 Django 中的表单字段属性【英文标题】:Access form field attributes in templated 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 “友好”的文档
【问题讨论】:
【参考方案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 %
【讨论】:
以上是关于访问模板化 Django 中的表单字段属性的主要内容,如果未能解决你的问题,请参考以下文章
如何访问 django 模板中的 django ManyToManyField