You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:18:37