我正在尝试使用mpld3-flask示例(https://github.com/nipunreddevil/mpld3-flask)作为模板来实现某种行为。我想要的是将标题栏上的链接添加到不同的图表,而不是使用单选按钮查询表单。
现在,上面的示例代码在templates / index.html中创建一个容器,然后在用户通过单击“查看绘图”按钮提交查询时用绘图填充它。就我所知,在index.html中会发生这种情况:
$("#query").click(function() {
$("#loading-div-background").show();
$("#container").hide();
var plot_type = $('input:radio[name=plot_type]:checked').val();
var qu = {"plot_type":plot_type}
$.ajax({
type: "POST",
async:true,
contentType: "application/json; charset=utf-8",
url: "/query",
data: JSON.stringify(qu),
success: function (data) {
var graph = $("#container");
graph.html(data);
$("#loading-div-background").hide();
$("#container").show();
},
dataType: "html"
});
});
我想要的是添加到当前包含“Home”的标题栏中,并在不同的页面中显示每个示例图。我将路由到另一个链接,然后使用绘图的数据填充模板html代码,而无需用户查询。
我对html有点新手,而且基本上对JavaScript一无所知。我的感觉在这里是有一些相对简单的方法来使用flask + jinja2来做到这一点,但我无法弄明白。
我遇到了因组合所有这些语言而产生的不清楚的命名空间的问题。在我自己的python编程中,我通常对名称空间非常严格(即我从来没有使用'来自____ import *')所以这让我有点疯狂。
答案 0 :(得分:4)
工作了一段时间后,我找到了一个似乎有效的解决方案并实现了我想要的行为。请注意,我使用的是twitter bootstrap css和javascript包。
基本上,我创建一个按钮组:
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary">
<input type="radio" name="options" id="home"> Option 1
</label>
<label class="btn btn-primary">
<input type="radio" name="options" id="option2"> Option 2
</label>
<label class="btn btn-primary">
<input type="radio" name="options" id="option3"> Option 3
</label>
然后在mpld3-flask示例的javascript中我使用:
$('.btn-primary').on('click', function(){
var qu = {"plot_type":$(this).find('input').attr('id')}
$(this).addClass('active').siblings().removeClass('active');
$.ajax({
type: "POST",
async:true,
contentType: "application/json; charset=utf-8",
url: "/query",
data: JSON.stringify(qu),
success: function (data) {
var graph = $("#container");
graph.html(data);
$("#container").show();
},
dataType: "html"
});
});
现在我有一个单选按钮栏,当前活动的绘图按钮设置为“活动”,只需要单击其中一个按钮即可绘制新的绘图。
编辑:在了解了有关flask和Jinja2的更多信息后,将mpld3生成的html传递给模板也很容易,但是有一点点问题;它看起来像这样
返回你的python路由功能:
return render_template('index.html', plot=mpld3_html)
然后在html模板中,你可以用
引用这个html {{plot|safe}}
希望这有助于其他人。