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

问题描述

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

搜索表单模型位于我的 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>

搜索表单:

1

呈现的表单没有问题(样式就像我想要的一样),但是当我查看呈现的页面的源代码时,会有一些不受欢迎的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. 这不是引导程序。 HTML中添加了<tr><th>标签,这意味着这是django的输出(认为引导程序主要是CSS)。在这种情况下,我觉得这些标签是由form.Form类(或相关模板)添加的。
  3. 您可以使用django's built-in form rendering options删除标签。例如,对于使用

    而不是类似格式的表单,您可以将{{ 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 }},问题已解决。

感谢您的帮助,

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...