use*_*055 3 python jquery wtforms flask-wtforms
我想使用Jquery添加或删除带有按钮的新WTForm输入字段,就像这里 http://www.sanwebe.com/2013/03/addremove-input-fields-dynamically-with-jquery/comment-page-1 但是使用我的表格字段.
我的表格:
class EditBook(Form):
title = TextField('title', validators = [Required()])
authors = FieldList(TextField())
Run Code Online (Sandbox Code Playgroud)
问题是我不能只是附加例子
$(InputsWrapper).append("{{form.authors(size=20)}}");
Run Code Online (Sandbox Code Playgroud)
它只是打印这个文本.
nsf*_*n55 10
您的示例使用javascript将文本生成的服务器端与您在浏览器中附加的文本混淆.您将无法使用{{ }}服务器端模板引擎使用的语法.在渲染过程中,这些文件被展开并替换为通过网络传输到客户端的HTML.您将需要构建这些内置模板函数否则将生成的实际DOM元素.
您实际想要创建的DOM元素如下所示:
<input id="authors-0" name="authors-0" type="text" value="Author Guy"></input>
<input id="authors-1" name="authors-1" type="text" value="Other Guy"></input>
Run Code Online (Sandbox Code Playgroud)
然后可以在WTForms可以使用的multipart/form-data流中对其进行编码.所以你实际上jQuery的东西需要创建一个像这样的字段
$('<input>').attr({
type: 'text',
id: 'authors-' + index ,
name: 'authors-' + index,
value: value
}).appendTo('form');
Run Code Online (Sandbox Code Playgroud)
其中index是下一个位置索引(这可以存储在data包装中的属性中ul),并且value是您要分配给此框的值(如果有).
另外,为了了解FieldList渲染的内容,您可以从命令行运行以下代码.它将打印WTForms在渲染过程中生成的实际文本.
from wtforms import Form, TextField, FieldList
from webob.multidict import MultiDict
class TestForm(Form):
authors = FieldList(TextField())
data_in = {'authors': ['Author Guy', 'Other Guy']}
test_form2 = TestForm(data=MultiDict(data_in))
print("HTML Render: %s" % test_form2.authors())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4926 次 |
| 最近记录: |