自定义django全部身份验证表单未提交

问题描述

我正在使用django所有身份验证登录表单。我想自定义表单字段的外观,因此我将帐户文件夹中的login.html更改如下:

<form class="login" method="POST" action="{% url 'account_login' %}">
    {% csrf_token %}
    {% for field in form.visible_fields|slice:'2' %}
        <div class="row form-group">
            {% if field.name == 'login' %}
                <input type="text" placeholder="Email"><i class="fas fa-at"></i>
            {% else %}
                <input type="password" placeholder="Password"><i class="la la-lock"></i>
            {% endif %}
        </div>
    {% endfor %}
    <a href="{% url 'account_reset_password' %}">Forgot Password?</a>
    <button type="submit">Sign In</button>
</form>

该表单完全按照我的意愿呈现,但是单击“提交”时没有任何反应。对我来说奇怪的是,如果我只是键入{{ form.as_p }}代替我的for循环,而看起来却不是我想要的形式,该表单就可以很好地提交。任何人都可以在我的循环中看到错误,还是这里有其他错误。我一直在寻找在线解决方案,但到目前为止没有成功

解决方法

您需要在输入标签中指定字段的名称,否则POST词典将为空。您正在使用{% if field.name == 'login' %},但是忘记了指定name属性。密码输入同样如此。

<form class="login" method="POST" action="{% url 'account_login' %}">
    {% csrf_token %}
    {% for field in form.visible_fields|slice:'2' %}
        <div class="row form-group">
            {% if field.name == 'login' %}
                <input name='login' type="text" placeholder="Email"><i class="fas fa-at"></i>
            {% else %}
                <input name='password' type="password" placeholder="Password"><i class="la la-lock"></i>
            {% endif %}
        </div>
    {% endfor %}
    <a href="{% url 'account_reset_password' %}">Forgot Password?</a>
    <button type="submit">Sign In</button>
</form>