从 Django 生成的表单中删除不需要的 th、td 和 tr 标签

Remove unwanted th, td and tr tags from Django generated form

我完成了一个在导航栏中带有搜索表单的拍卖应用程序。

搜索表单模型在我的 forms.py 文件中(它不是 ModelForm,因为我不需要将搜索表单数据保存在任何数据库中模型):

class SearchForm(forms.Form):
    search = forms.CharField(label="",
                            min_length=1,
                            max_length=50,
                            widget=forms.TextInput
                            (attrs={'class':'form-control mr-sm-2',
                            'placeholder':'Name or category',
                            'type':'search',
                            'aria-label':'Search'
                            }))

表单在我的 layout.html 中呈现如下:

<form class="form-inline my-2 my-lg-0" action="{% url 'auctions:search' %}" method="POST">
                    {% csrf_token %}
                    {{ searchform }}
                    <button class="btn btn-outline-light my-2 my-sm-0" type="submit">Search</button>
</form>

搜索表单:

呈现的表单没有问题(样式就像我想要的那样),但是当我查看呈现页面的源代码时,有一些未处理的 tr、td 和 th 标签:

<form class="form-inline my-2 my-lg-0" action="/search" method="POST">
                    <input type="hidden" name="csrfmiddlewaretoken" value="glVkeNbCkWjiInGZ2cwORkXSu48otl5TPnJAAGxzdhzzdKFSSMxJVyRk9oK0HNmk">
                    <tr><th><label for="id_search">Search:</label></th><td><input type="search" name="search" class="form-control mr-sm-2" placeholder="Name or category" aria-label="Search" maxlength="50" minlength="1" required id="id_search"></td></tr>
                    <button class="btn btn-outline-light my-2 my-sm-0" type="submit">Search</button>
</form>

我试图在我的 views.py 中设置 label_suffix="",它会删除标签标签,但不会删除 tr、td 和 th 标签:

return render(request, "auctions/index.html", {
    "auctions": auctions,
    "searchform": SearchForm(label_suffix="")
})

这些标签导致 W3C 验证器出错,所以我有几个关于这个问题的问题:

1。那很重要么 ?我是编程新手,我不知道这是否会对我的应用造成严重问题。

2。是Django形式还是Bootstrap风格造成的?

3。有没有办法删除这些标签?

感谢您的帮助,

此致,

  1. 遵守标准的重要性这个问题完全取决于您。即使没有父 <table> 标记(我假设 W3C 验证指向的是什么?),大多数浏览器也会处理结果。
  2. 不是bootstrap。 <tr><th> 标签被添加到您的 HTML 中,这意味着这是 django 的输出(认为 bootstrap 主要是 CSS)。在这种情况下,在我看来这些标签是由 forms.Form class (或相关模板)
  3. 添加的
  4. 您可以使用 django's built-in form rendering options 删除标签。例如,对于使用

    而不是类似

  5. 的表单,您可以将 {{ searchform }} 更改为 {{ searchform.as_p }}

要点是您需要阅读上面链接的表单渲染文档。

谢谢@kerasbaz,起初我尝试使用 form.as_p 并且遇到了一些样式问题,然后我在文档中找到了这个:

https://docs.djangoproject.com/en/3.1/topics/forms/#rendering-fields-manually

所以我在 layout.html 中将 {{ searchform }} 更改为 {{ searchform.search }} 并且问题已解决。

感谢您的帮助,