我想更改ModelForm的输入字段的类/属性,但如果可能的话,我想从模板中完成。
以下是我的解决方案,使用django django-widget-tweaks
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
{{form.title|add_class:"form-control"|attr:"placeholder:Title"|attr:"type:text"}}
</div>
<div class="form-group">
{{form.description|add_class:"form-control"|attr:"placeholder:Description"}}
</div>
<div class="form-group">
{{form.author|add_class:"form-control"|attr:"placeholder:Author"}}
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" value="Submit" />
</div>
</form>
我的问题是,这不是很干,我想知道是否有更好的方法来做到这一点。我知道django已经遍历表单,但我不确定在修改属性时如何集成它。
感谢任何帮助。
答案 0 :(得分:2)
您可以将占位符存储在字段help_text
field中。有了这个,您就可以轻松地遍历这些字段:
{% for field in form %}
<div class="form-group">
{{ field|add_class:"form-control"|attr:field.help_text }}
</div>
{% endfor %}
不幸的是,对于第二个参数,很难/不可能使用过滤器,因此您需要将help_text
设置为'placeholder:%s'
,其中%s
是您想要的值。
如果您使用的是常规表单,请在构造函数中设置help_text
。但是如果您使用的是模型表单,我认为最好创建一个新的模板标记,可以从字段标题中为您创建'placeholder:%s'
字符串:
@register.assignment_tag
def get_placeholder_arg(field):
return 'placeholder:%s' % field.label
然后你的代码看起来像这样:
{% for field in form %}
{% get_placeholder_arg field as arg %}
<div class="form-group">
{{ field|add_class:"form-control"|attr:arg }}
</div>
{% endfor %}