在用户通过变形(金字塔)提交后将 JSON 送入 Dynatable
Feeding JSON into Dynatable after user submission via Deform (Pyramid)
我正在构建一个网页,它根据我后端的信息 returns 和 table 接受用户输入。我正在使用网络框架金字塔。我目前的做法如下:
创建 Colander Schema 和使用 Chameleon 模板呈现的 Deform 表单对象。
一旦用户点击提交,验证提交并使用输入生成字典列表。
将此结果编码为JSON,并将其提供给dynatable.js
在我的提交表单下方显示动态table
第 3 步和第 4 步是我遇到问题的地方。我不知道我需要做什么才能将我的词典列表公开给 dynatable。我读过 Pyramid Quick Tutorial,所以我知道如何用 JSON 渲染器做简单的 AJAX,但我不知道如何在我当前的情况下实现它。
为了更好的理解,我处理Deform输入的函数如下(部分函数和模板改编自官方Github repo提供的Deform示例):
@view_config(route_name='query_log', renderer='templates/form.pt')
def query_log(request):
schema = Device().bind(request=request)
# Create a styled button with some extra Bootstrap 3 CSS classes
process_btn = deform.form.Button(name='process', title="Process")
form = deform.form.Form(schema, buttons=(process_btn,), use_ajax=True)
# User submitted this form
if request.method == "POST":
if 'process' in request.POST:
try:
appstruct = form.validate(request.POST.items())
# Save form data from appstruct
print("Enter ID:", appstruct["ID"])
print("Enter date:", appstruct["date"])
# This variable is what I want to feed to dynatable
results = parse_log(appstruct["ID"], appstruct["date"].strftime('%Y-%m-%d'))
json.dumps(results)
# Create ppoup
request.session.flash('Returning Results.')
# Redirect to the page shows after succesful form submission
return HTTPFound("/")
except deform.exception.ValidationFailure as e:
# Render a form version where errors are visible next to the fields,
# and the submitted values are posted back
rendered_form = e.render()
else:
# Render a form with initial default values
rendered_form = form.render()
return {
# This is just rendered HTML in a string
# and can be embedded in any template language
"rendered_form": rendered_form,
}
我如何通过 JSON 将此结果变量传递给 Dynatable 并在表单下方呈现 table?
先尝试小步骤。
在您的 try
区块中验证成功后:
try:
appstruct = form.validate(request.POST.items())
# following depends on structure of data you need
results = dict("id" = appstruct["ID"],
"date" = appstruct["date"].strftime('%Y-%m-%d'))
data = json.dumps(results)
return dict(data=data)
并在目标模板中接受data
参数,渲染效果。
一旦准备就绪,您就可以研究如何通过 XHR 请求传递 data
,这取决于您选择的 JavaScript 库。
我正在构建一个网页,它根据我后端的信息 returns 和 table 接受用户输入。我正在使用网络框架金字塔。我目前的做法如下:
创建 Colander Schema 和使用 Chameleon 模板呈现的 Deform 表单对象。
一旦用户点击提交,验证提交并使用输入生成字典列表。
将此结果编码为JSON,并将其提供给dynatable.js
在我的提交表单下方显示动态table
第 3 步和第 4 步是我遇到问题的地方。我不知道我需要做什么才能将我的词典列表公开给 dynatable。我读过 Pyramid Quick Tutorial,所以我知道如何用 JSON 渲染器做简单的 AJAX,但我不知道如何在我当前的情况下实现它。
为了更好的理解,我处理Deform输入的函数如下(部分函数和模板改编自官方Github repo提供的Deform示例):
@view_config(route_name='query_log', renderer='templates/form.pt')
def query_log(request):
schema = Device().bind(request=request)
# Create a styled button with some extra Bootstrap 3 CSS classes
process_btn = deform.form.Button(name='process', title="Process")
form = deform.form.Form(schema, buttons=(process_btn,), use_ajax=True)
# User submitted this form
if request.method == "POST":
if 'process' in request.POST:
try:
appstruct = form.validate(request.POST.items())
# Save form data from appstruct
print("Enter ID:", appstruct["ID"])
print("Enter date:", appstruct["date"])
# This variable is what I want to feed to dynatable
results = parse_log(appstruct["ID"], appstruct["date"].strftime('%Y-%m-%d'))
json.dumps(results)
# Create ppoup
request.session.flash('Returning Results.')
# Redirect to the page shows after succesful form submission
return HTTPFound("/")
except deform.exception.ValidationFailure as e:
# Render a form version where errors are visible next to the fields,
# and the submitted values are posted back
rendered_form = e.render()
else:
# Render a form with initial default values
rendered_form = form.render()
return {
# This is just rendered HTML in a string
# and can be embedded in any template language
"rendered_form": rendered_form,
}
我如何通过 JSON 将此结果变量传递给 Dynatable 并在表单下方呈现 table?
先尝试小步骤。
在您的 try
区块中验证成功后:
try:
appstruct = form.validate(request.POST.items())
# following depends on structure of data you need
results = dict("id" = appstruct["ID"],
"date" = appstruct["date"].strftime('%Y-%m-%d'))
data = json.dumps(results)
return dict(data=data)
并在目标模板中接受data
参数,渲染效果。
一旦准备就绪,您就可以研究如何通过 XHR 请求传递 data
,这取决于您选择的 JavaScript 库。