如何在Django手动渲染表单时按字段类型分配CSS类?
Django手动渲染表单:按字段类型分配CSS类
当然可以实现,你可以通过访问字段的widget属性判断其类型,进而动态为不同类型字段分配特定CSS类。以下是适配你需求的修改后代码:
{% load widget_tweaks %} {% for field in form.visible_fields %} <div class="field"> <label class="label">{{ field.label_tag }}</label> <div class="control"> {% if form.is_bound %} {% if field.errors %} {% render_field field class="nice-looking-field {% if field.field.widget.input_type == 'text' %}css-class-1{% elif field.field.widget.input_type == 'checkbox' %}css-class-2{% endif %}" %} {% for error in field.errors %} <span class="error-text">{{ error }}</span> {% endfor %} {% else %} {% render_field field class="{% if field.field.widget.input_type == 'text' %}css-class-1{% elif field.field.widget.input_type == 'checkbox' %}css-class-2{% endif %}" %} {% endif %} {% else %} {% render_field field class="{% if field.field.widget.input_type == 'text' %}css-class-1{% elif field.field.widget.input_type == 'checkbox' %}css-class-2{% endif %}" %} {% endif %} {% if field.help_text %} <p class="help-text">{{ field.help_text }}</p> {% endif %} </div> </div> {% endfor %} {% if form.non_field_errors %} <div class="box"> {% for error in form.non_field_errors %} <span class="non-field-error">{{ error }}</span> {% endfor %} </div> {% endif %}
关键逻辑说明
- 通过
field.field.widget.input_type可直接获取字段输入类型(如text、checkbox、password等),这是最直接的判断方式。 - 若需更精准区分widget类型(比如区分
TextInput和EmailInput),可使用field.field.widget.__class__.__name__,示例:{% if field.field.widget.__class__.__name__ == 'TextInput' %}css-class-1{% endif %} - 代码保留了你原有的错误状态处理逻辑,当字段绑定且存在错误时,会同时应用
nice-looking-field和对应类型的CSS类。
内容的提问来源于stack exchange,提问作者Ivory Leaf
相关产品推荐
相关产品推荐

