从 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。有没有办法删除这些标签?
感谢您的帮助,
此致,
- 遵守标准的重要性这个问题完全取决于您。即使没有父
<table>
标记(我假设 W3C 验证指向的是什么?),大多数浏览器也会处理结果。
- 不是bootstrap。
<tr>
和 <th>
标签被添加到您的 HTML 中,这意味着这是 django 的输出(认为 bootstrap 主要是 CSS)。在这种情况下,在我看来这些标签是由 forms.Form class (或相关模板) 添加的
- 您可以使用 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 }}
并且问题已解决。
感谢您的帮助,
我完成了一个在导航栏中带有搜索表单的拍卖应用程序。
搜索表单模型在我的 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。有没有办法删除这些标签?
感谢您的帮助,
此致,
- 遵守标准的重要性这个问题完全取决于您。即使没有父
<table>
标记(我假设 W3C 验证指向的是什么?),大多数浏览器也会处理结果。 - 不是bootstrap。
<tr>
和<th>
标签被添加到您的 HTML 中,这意味着这是 django 的输出(认为 bootstrap 主要是 CSS)。在这种情况下,在我看来这些标签是由 forms.Form class (或相关模板) 添加的
- 您可以使用 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 }}
并且问题已解决。
感谢您的帮助,