Django 如何使用Widget Tweaks

Django 如何使用Widget Tweaks

Django提供了一种简单的方式来创建表单。有多种创建表单的方式,但强烈推荐使用Django内置的表单。因为它会自动化大量工作,并提供稳定和安全的功能。但是Django内置的表单的问题在于,它不容易让我们编辑表单以进行自定义设计。

在本教程中,我们将看到一种流行的自定义Django表单的方法。我们将在表单中的各个字段中包含我们自定义的CSS、类或id。让我们看看为什么我们需要使用Django部件修正。

Django内置表单的问题

在转向Django部件修正包之前,我们将详细说明我们在Django内置表单中遇到的一些问题。

我们使用Bootstrap类创建一个表单。让我们看看简单表单的代码。

<form>
  <div class="form-group">
    <label for="id_email">Email address</label>
    <input type="email" class="form-control" id="id_email" name="email">
  </div>
  <div class="form-group">
    <label for="id_password">Password</label>
    <input type="password" class="form-control" id="id_password" name="password">
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>

在这里,我们设计了一个带有一些属性的简单表单,根据我们的要求可以添加更多。现在我们将在model.py文件中创建一个模型。

from django.db import models

# Create your model here
class Profile(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField(max_length=254)
    phone = models.CharField(max_length=20)
    bio = models.TextField(max_length=500)

    def __str__(self):
        return self.first_name

使用这个模型,我们创建一个Django表单。创建一个 forms.py 文件,并添加以下代码。

form.html

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">

    <title>Simple Form</title>
  </head>
  <body>
    <h1>Simple Form</h1>

<form method="post">
    {% csrf_token %}
    {{ form }}
    <div class="form-group">
      <button type="submit" class="btn btn-success">
        <span class="glyphicon glyphicon-ok"></span> Save
      </button>
      <a href="{% url 'index' %}" class="btn btn-default">Cancel</a>
    </div>
</form>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js" integrity="sha384-eMNCOe7tC1doHpGoWe/6oMVemdAVTMs2xqW4mwXrXsW0L84Iytr2wi5v2QjrP/xp" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.min.js" integrity="sha384-cn7l7gDp0eyniUwwAZgrzD06kc/tftFf19TOAs2zVinnD/C7E91j9yyk5//jjpt/" crossorigin="anonymous"></script>
    -->
  </body>
</html>

运行服务器并访问 http://127.0.0.1:8000/form/。

Django 如何使用Widget Tweaks

Django Tweaks的安装

要自定义Django内置表单,我们需要使用Django tweaks。我们使用以下命令进行安装。

pip install django-widget-tweaks

安装到系统后,在 INSTALLED_APPS 中添加 widget_tweaks

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MyWeatherApp',
    'widget_tweaks',
]

使用方法

在本节中,我们将展示该软件包提供的诸多选项之一。如果您想了解全部内容,您可以参考官方文档。widget-tweaks应用提供了两个可同时或独立使用的设置。

  • render_field 模板标签,可使用类似HTML语法自定义表单字段。
  • 几个模板过滤器,用于自定义表单字段的HTML属性和CSS类。

    render_fields 更易于使用,并使设计师和前端开发人员的字段自定义工作更加简单。

然而,模板过滤器比render_field标签更强大。但它们更为复杂,并且缺少类似HTML的语法。

要开始使用它,我们必须在模板文件中加载以下标签。

{% load widget_tweaks %}

现在通过迭代表单中的字段来扩展它,以公开输入标签,替换此处。

{{form}}

从这里开始

{% for hidden in form.hidden_fields %}
  {{ hidden }}
{% endfor %}

{% for field in form.visible_fields %}
  <div class="form-group">
    <label for="{{ field.id_for_label }}">{{ field.label }}</label>
    {{ field }}
    {% for error in field.errors %}
      <span class="help-block">{{ error }}</span>
    {% endfor %}

  </div>
{% endfor %}
<button type="submit" class="btn btn-success">
        <span class="glyphicon glyphicon-ok"></span> Save
      </button>
      <a href="{% url 'home' %}" class="btn btn-default">Cancel</a>
</form>

输出结果:

Django 如何使用Widget Tweaks

如上所示的代码,表单设计已经改进,但是我们的表单还没有显示出来。

现在我们使用django调整并为字段元素添加额外属性。

Django 如何使用Widget Tweaks

我们已经在每个Django表单字段中应用了bootstrap类。我们将把所有的代码都放在CSS文件中,通过类或ID来自定义每个字段。

{% render_field form.first_name class="form-control" %} 

让我们来了解一下render_field的下面实现。

Django 如何使用Widget Tweaks

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程