Django 模板输入表单字段上的占位符问题

Problem with placeholder on a django template input form field

我正在使用默认的 django 身份验证系统创建用户登录。

使用 bootstrap 模板,我正在创建一个带有自定义字段的表单,它们工作正常。

问题是在显示此表单时,它呈现的是值属性而不是我传递给它的占位符。

这是它的样子: login page

login.html

    <form method="post" action="{% url 'login' %}"> {% csrf_token %}
      <img class="mb-4" src="{% static 'images/logo.jpg' %}" alt="" width="100" height="100">
      <h1 class="h3 mb-3 fw-normal">Please sign in</h1>

      <div class="form-floating">
        <input type="text" class="form-control" id="floatingInput" placeholder="name@example.com"
          value="{{form.username}}">
        <label for="floatingInput">Username</label>
      </div>
      <div class="form-floating">
        <input type="password" class="form-control" id="floatingPassword" placeholder="Password"
          value="{{form.password}}">
        <label for="floatingPassword">Password</label>
      </div>

      <div class="checkbox mb-3">
        <label>
          <input type="checkbox" value="remember-me"> Remember me &emsp; <a href="{% url 'password_reset' %}">
            Lost password?</a>
        </label>
      </div>
      <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
      <p class="mt-5 mb-3 text-muted">&copy; 2022 all rights deserved</p>
    </form>

使用 {{ form.username }} 时,您会将 str(form.username) 发送到值属性。表单字段的 __str__ 方法呈现 HTML。这就是为什么你看到你所看到的。

要解决此问题,您可以放置​​ {{ form.username.initial }} 以显示字段的初始值。

提示:尝试使用 crispy forms 来呈现表单。它更简单,并且使语法更紧凑,这取决于表单代码,而不是 HTML。参见 https://django-crispy-forms.readthedocs.io/en/latest/

另一件事,我认为您在输入字段中遗漏了 name 属性。不确定没有它是否有效。