【问题标题】:When validating on W3C django is wrapping input fields in <tr><th>在 W3C 上验证时 django 将输入字段包装在 <tr><th>
【发布时间】:2023-03-31 01:27:01
【问题描述】:

这是我的注册表单模板代码

<form id="user_form" method="post" action="/accounts/register/">
    {% csrf_token %}
    {{ user_form }}
    <br>
    <input type="submit" class="btn btn-default pull-right" value="Register">
    <br>
</form>

当我检查我的实时站点或本地环境的 html 时,我看到以下 html

<form id="user_form" method="post" action="/accounts/register/">
   <input type="hidden" name="csrfmiddlewaretoken" value="blah">
   <label for="id_username">Username:</label><input class="form-control" id="id_username" name="username" type="text">
   <label for="id_email">Email:</label><input class="form-control" id="id_email" name="email" type="email">
   <label for="id_password">Password:</label><input class="form-control" id="id_password" name="password" type="password">
    <br>
    <input type="submit" class="btn btn-default pull-right" value="Register">
    <br>
</form>

但是当我在 W3C 上进行验证时,我收到了错误,因为我的表单

Stray start tag tr. <tr><th><label for="id_username">Username:</label></th><td><inp…

我看到标记已更改

<form id="user_form" method="post" action="/accounts/register/">
    <input type='hidden' name='csrfmiddlewaretoken' value='blah' />
    <tr><th><label for="id_username">Username:</label></th><td><input class="form-control" id="id_username" name="username" type="text" /></td></tr>
    <tr><th><label for="id_email">Email:</label></th><td><input class="form-control" id="id_email" name="email" type="email" /></td></tr>
    <tr><th><label for="id_password">Password:</label></th><td><input class="form-control" id="id_password" name="password" type="password" /></td></tr>
    <br>
    <input type="submit" class="btn btn-default pull-right" value="Register">
    <br>
</form>

【问题讨论】:

    标签: html django django-forms django-templates w3c-validation


    【解决方案1】:

    你只需要使用:

    {{ user_form.as_p }}
    

    这将在&lt;p&gt; 标签内呈现表单的标签和字段。 docs 为您提供了一些关于输出的选项,或者您可以通过迭代字段来手动呈现表单,如下所示:

        <!-- first output any hidden fields first -->
        <div style="display: none;">
            <!-- I've wrapped this in a div for W3C validation -->
            {{ user_form.hidden_fields }}
        </div>
    
    {% for field in user_form.visible_fields %}
        <div class="some-class">
            {{ field.label_tag }}
            {{ field }}
        </div><!--/.some-class-->
    {% endfor %}
    

    我建议尝试上述方法,只是为了尝试手动渲染。

    【讨论】:

    • as_p 工作,谢谢!仍然对为什么 w3c 的爬虫会看到额外的标记感到困惑,但我没有,我在多个浏览器中进行了测试。
    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 2015-07-21
    • 2015-07-29
    • 1970-01-01
    • 2018-08-09
    • 2011-06-19
    • 2011-11-22
    • 2017-11-21
    相关资源
    最近更新 更多