不要用Flas渲染整个模板

2024-04-23 07:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我总是使用标准的Flask命令render_template(),来呈现我的模板。整个模板只是静态的,但是有一个表单,在用户输入后会改变,还有一个图像滑块。现在的问题是:当用户提交他/她的输入时,wohle模板将被重新呈现。在

我是否可能只更新表单数据而不更改页面的其余部分?在

我的模板是这样的:

<html>
<head>
</head>
<body>
<form action="/" method ="POST" id="Form">
    {{msform.ms_1}} is to {{msform.ms_2}} like {{msform.ms_3}} is to {{msform.ms_submit}}
</form>
</body>
</html>

我的views.py如下:

^{pr2}$

我应该把第一个答案放在哪里?谢谢,费德温多


Tags: to用户命令form模板flask表单标准
1条回答
网友
1楼 · 发布于 2024-04-23 07:37:14

如果希望表单在不重新加载while页面的情况下发送包含数据的请求,那么解决方案是使用Javascript使用XHR请求(AJAX请求)发送表单数据。在

在模板发送到浏览器后,服务器无法仅刷新模板的一部分。HTTP是无状态的,所以在您的浏览器发出提交请求之后,服务器用您呈现的模板进行响应,就这样。在

如果需要“替换”或“重新呈现”页面的一部分而不需要重新加载整个页面,则需要Javascript和XHR请求。在

您需要创建一个Flask端点来接收发布的数据。 使用jQuery的示例:

$("#your-form").submit(function(e) {
    e.preventDefault(); // Prevent the normal form submit

    $.ajax({
           type: "POST",
           url: '/your-api',
           data: $("#your-form").serialize(),
           success: function(data) {
               // Do something here. For example, the server can return JSON here and you use Js to create the template client-side, or you server can return an HTML fragment and here you append it to a dom node
           }
         });
});

通常,这类端点返回JSON,但是如果您希望尽可能多地使用服务器端模板,那么可以将重新呈现的表单作为对AJAX调用的响应返回,然后使用jQuery将该响应附加到容器元素中,从而有效地替换表单。在

假设您使用Jinja2作为模板引擎。然后,在第一次呈现整个页面时,可以为表单设置一个partial,它通常包含在主模板中。 然后,当您在提交时响应AJAX请求时,就可以呈现相同的部分。在

希望这对你有帮助。在

相关问题 更多 >