请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师你好,关于表单有一些疑问

老师你好
Django 表单似乎没有 type="submit" 这种 widget,只能自己通过 attrs 手动设置,但是问题是如果直接将表单实例在前端渲染,它又会自动渲染出每个字段的 <label> 标签,那么对于按钮,我们根本不需要 <label> 标签,我想问下老师是否可以手动渲染表单字段,也就是,我想要哪里就渲染哪里,就像 WTForms 那样逐个 field 逐个 label 的渲染,或者说有什么办法实现一个 SubmitField 的吗?

下面是我跟着老师写的表单类,以及 HTML 代码

from django import forms


class RegisterForm(forms.Form):
    username = forms.CharField(label="用户名", max_length=18, required=True)
    password = forms.CharField(
        label="密码",
        widget=forms.TextInput(attrs={'class': 'test-class', 'id': 'testID', 'type': 'password'})
    )
    submit = forms.CharField(widget=forms.TextInput(attrs={'type': 'submit'}))
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Django 表单示例</h1>
<form action="{% url 'register' %}" method="POST">
    {% csrf_token %}
    {{ form.as_table }}
</form>
</body>
</html>

正在回答

1回答

有一种自定义的方案 我指的前端。你在后端定义好form后,并不需要渲染到前端,而是自己直接写html 只需要你前端form里的name与type保持后端一致即可。这样就可以做到前端自定义开发表单代码,后端的表单只是做验证即可,错误可以通过render渲染回去

0 回复 有任何疑惑可以回复我~
  • 提问者 秋荏苒 #1
    谢谢老师的回复!
    不过既然已经存在 attr 这个参数了,我们实际上没什么必要手动写 HTML 表单元素了,无非就是定义 id class 这些属性,甚至行内样式都是可以写的,就是这个按钮渲染,让人很无奈啊..django 怎么会没考虑到呢..
    回复 有任何疑惑可以回复我~ 2019-12-06 17:16:10
  • deweizhang 回复 提问者 秋荏苒 #2
    嗯 的确。不过也不用过分纠结这块儿。真实工作中 基本很少用到表单。基本都是前端原生开发,后端验证~
    回复 有任何疑惑可以回复我~ 2019-12-06 17:18:34
  • 提问者 秋荏苒 回复 deweizhang #3
    谢谢老师,我明白了!
    回复 有任何疑惑可以回复我~ 2019-12-06 17:21:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信