问题描述
搜索表单模型位于我的 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样式引起的?
感谢您的帮助,
最诚挚的问候,
解决方法
- 遵守标准的重要性的问题实际上取决于您。即使没有父
<table>
标记,大多数浏览器也会处理结果(这是我假设W3C验证所指向的标记?)。 - 这不是引导程序。 HTML中添加了
<tr>
和<th>
标签,这意味着这是django的输出(认为引导程序主要是CSS)。在这种情况下,我觉得这些标签是由form.Form类(或相关模板)添加的。 - 您可以使用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 }}
,问题已解决。
感谢您的帮助,