当前位置: 首页 > news >正文

Django 美化使用ModelForm的输入框

在初次使用ModelForm时,我的html文件代码如下,主要内容是显示一个卡片式表单,通过循环遍历 form 对象动态生成表单字段

{% extends 'layout.html' %}

{% block content %}
<div class="container">
    <div class="c1">
        <a class="btn btn-success" href="/user/add">新建用户</a>
    </div>

    <div class="c1">
        <a class="btn btn-success" href="/user/model/form/add">新建用户ModelForm</a>
    </div>

    <div class="card c1">
        <div class="card-header">
            新建用户
        </div>
        <div class="card-body">
            <form method="post">
                {% csrf_token %}
                {% for field in form%}
                <div class="form-label">
                    <label>{{ field.label }}</label>
                    {{ field }}
                </div>
                {% endfor %}

                <button type="submit" class="btn btn-primary">提交</button>
            </form>

        </div>

    </div>

</div>
{% endblock %}

实现效果

但看着效果不太美观,通过增加下面的代码,来让ModelForm的使用更加的美观好看

def __init__(self, *args, **kwargs):
    # 调用父类的初始化方法
    super().__init__(*args, **kwargs)

    # 遍历表单中的所有字段
    for name, field in self.fields.items():
        # 为每个字段的 widget 添加 HTML 属性
        field.widget.attrs = {
            "class": "form-control",  # 添加 Bootstrap 样式
            "placeholder": field.label  # 设置占位符为字段的标签
        }

代码功能

  1. 动态设置表单字段的 HTML 属性

    • 遍历表单中的所有字段(self.fields.items())。

    • 为每个字段的 widget.attrs 添加 class 和 placeholder 属性。

  2. 添加 Bootstrap 样式

    • 为每个字段的 HTML 输入元素添加 class="form-control",使其符合 Bootstrap 的表单样式。

  3. 设置占位符文本

    • 将字段的 label 作为 placeholder 属性值,显示在输入框中作为提示文本。

这段代码通过重写 __init__ 方法,动态为表单字段添加 HTML 属性和样式,提升了表单的可用性和美观性。它特别适合与 Bootstrap 等前端框架结合使用,同时减少了模板中的重复代码。

相关文章:

  • 案例-02.部门管理-查询
  • C# windowForms 的DataGridView控件的使用
  • Flutter 常见布局模型
  • flutter image_cropper插件安装后 打包apk 报错命名空间问题
  • matlab下载安装图文教程
  • 坐井说天阔---DeepSeek-R1
  • React项目react-pdf使用
  • P10452 货仓选址
  • 【devops】Github Actions Secrets | 如何在Github中设置CI的Secret供CI的yaml使用
  • LabVIEW 中 dotnet.llb 库功能
  • 图形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan简介
  • .net6 mvc 获取网站(服务器端)的IP地址和端口号
  • CTex安装和使用(1)
  • Windows 下安装 Python 和 Nodejs
  • 联想笔记本电脑摄像头灯亮,但没有画面怎么解决,
  • SM2加签、验签,加密、解密
  • 【洛谷】B3849 [GESP样题 三级] 进制转换
  • DeepSeek与ChatGPT的全面对比
  • electron 学习
  • 【virtiofs】ubuntu24.04+qemu7.0调试virtiofs
  • 巴防空系统击落印度无人机,印称巴方违反停火协议
  • 招商蛇口:今年前4个月销售额约498.34亿元
  • 读图|展现城市品格,上海城市影像走进南美
  • 经济日报整版聚焦“妈妈岗”:就业路越走越宽,有温度重实效
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小
  • 视频|漫画家寂地:古老丝路上的文化与交流留下的独特印记