我正在使用带有Jinja2模板的Flask来创建自定义表单。在这些表单中,我需要在字段值发生变化时更改表单的一部分。
基本上,我的表单有select#content-type
,我可以在其中选择内容类型,然后fieldset#content
,当select
的值发生变化时,其HTML应该会有所不同。我有几个HTML模板,具体取决于select
。
我的JS看起来像这样:
<script type="text/javascript">
$(function () {
$("select#content-type").change(function () {
switch ($(this).val()) {
case "type1":
var html = "{% include "type1.html" | escape %}";
$("fieldset#content").html(html);
break;
// ...
}
});
});
</script>
问题是,escape
过滤器在include
语句中不起作用,safe
也不起作用。我怎样才能做到这一点,或者有更好的方法来做我想做的事情?
答案 0 :(得分:0)
有一些解决方案。
实现此目的的一种简单方法是使用辅助CSS类隐藏表单的所有内容类型相关部分,例如.hide {display: none;}
,当客户选择某些内容时,只需从相应的div中移除此类:$("div#type1").removeClass("hide");
。
另一种方法是使用Ajax请求加载表单的内容类型相关部分。您可以定义类似/loadform
的路由,其中服务器读取相应的模板文件并将其打印出来。然后,您可以将响应HTML注入原始表单。
第三种方法是在客户选择内容类型时使用javascript提交部分填充的表单,然后呈现完整的表单。