1

我正在构建一个网页,它接受用户输入并根据我后端的信息返回一个表格。我正在使用网络框架 Pyramid。我目前的方法如下:

  1. 创建一个漏勺模式和一个使用变色龙模板呈现的变形表单对象。

  2. 一旦用户点击提交,验证提交并使用输入生成字典列表。

  3. 将此结果编码为 JSON 并将其提供给 dynatable.js

  4. 在我的提交表单下方显示可动态化

第 3 步和第 4 步是我遇到问题的地方。我不知道我需要做什么才能将我的字典列表公开给可动态化的。我已经阅读了 Pyramid 快速教程,所以我知道如何使用 JSON 渲染器进行简单的 AJAX,但我不知道如何在我目前的情况下实现它。

为了更好地理解,我处理变形输入的函数如下(部分函数和模板改编自官方 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 并将表格呈现在表单下方?

4

1 回答 1

1

首先尝试婴儿步骤。

在您的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参数,渲染味道。

一旦你有了它,你就可以研究如何data通过 XHR 请求传递,这取决于你选择的 JavaScript 库。

于 2018-11-19T12:54:05.613 回答