html - Django 表单使用无效的 HTML 语法呈现
问题描述
我有一个使用集成表单的 Django 项目。但它向我的客户发送了错误的 HTML 语法。这应该没什么大不了的,因为现在的浏览器会清理这些错误。但是,当表单被发送回服务器时,表单无法验证,因为 Firefox 会发回清理后的版本。
我有一个带有多项选择的表单:
class ProjectForm(forms.Form):
# [...]
project_leaders = forms.ModelChoiceField(widget=forms.SelectMultiple, queryset=User.objects.all(), initial=0)
此表单集成在相应的 html 文件中:
{{ project_form.as_p | linebreaks }}
这是它的源代码(通过 Firefox Page Source):
<p>[...] <select name="project_leaders" required id="id_project_leaders" multiple><br>
<option value="test">test</option></p>
<p></select></p>
Firefox 会清理 oc 但它应该被 django 发送和接受。有谁知道我怎么能 django 做到这一点?
解决方案
这应该没什么大不了的,因为现在的浏览器会清理这些错误。
浏览器尽力从错误的标记中提取一些含义,但结果并不总是作者所期望的。为了获得所需的结构,作者应该编写正确的 HTML。这种情况自 90 年代以来一直没有改变。
在这种特定情况下,我的建议是去掉| linebreaks
filter。它适用于带有最简单格式标签的纯文本。
过滤器<br>
在开始<select>
标签后添加一个。这会导致浏览器自动关闭<select>
再次,因为<br>
s 在 s 内部无效<select>
。然后将<option>
元素放置在 之外<select>
,不再有任何效果。关闭和重新打开<p>
标签是浏览器不完全知道如何处理最后一个流浪者的症状</select>
。
推荐阅读
- python-3.x - 如何为命令添加冷却时间
- delphi - 更改 xy 值图中的 x 轴标签
- excel - 旋转时有没有办法在值字段中加入多个字符串?
- highcharts - 在 Highstock 中鼠标悬停时绘制多个系列
- php - 如何用 2 个键值对数组关联进行求和
- php - PHP + PostgreSQL + ODBC - UTF8 - 变音符号问题
- branch.io - 禁用跟踪并尝试创建短 URL 时,Brac URL 给出“创建 URL 时出现问题”
- angular - npm WARN ngx-qrcode2@0.0.9 需要 @angular/core@^6.0.3 的对等点,但没有安装。您必须自己安装对等依赖项
- kubernetes - Kubernetes - Filebeat 停止发送/获取日志。重新启动 filebeat pod 后 FIlebeat 工作
- bash - 获取 gcc 版本号并与 bash 进行比较