【发布时间】:2015-06-20 22:18:31
【问题描述】:
在 django 中,是否可以创建生成器而不是函数。
现在我的view.py 中有这个功能
def first_case(request):
data = [[1,2],[4,7]]
template = loader.get_template('usecases/index.html')
context = RequestContext(request, {'data': data,})
return HttpResponse(template.render(context))
是否可以创建一个将数据生成到模板的生成器?
类似这样的:
def first_case(request):
template = loader.get_template('usecases/index.html')
for data in generator_data():
context = RequestContext(request, {'data': data,})
yield HttpResponse(template.render(context))
这是index.html
<!DOCTYPE html>
<html>
<head>
<title>The d3 test</title>
<style>
.chart {
}
.main text {
font: 10px sans-serif;
}
.axis line, .axis path {
shape-rendering: crispEdges;
stroke: black;
fill: none;
}
circle {
fill: steelblue;
}
</style>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.v2.js"></script>
</head>
<body>
<div class='content'>
<!-- /the chart goes here -->
</div>
<!-- {% load static from staticfiles %} -->
<!-- // <script type="text/javascript" src = "{% static "usecases/scatter.js" %}" ></script> -->
<script type="text/javascript">
var data = {{data}};
var margin = {top: 20, right: 15, bottom: 60, left: 60},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var x = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d[0]; })])
.range([ 0, width ]);
var y = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d[1]; })])
.range([ height, 0 ]);
var chart = d3.select('body')
.append('svg:svg').attr('width', width + margin.right + margin.left)
.attr('height', height + margin.top + margin.bottom)
.attr('class', 'chart')
var main = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.attr('width', width)
.attr('height', height)
.attr('class', 'main')
// draw the x axis
var xAxis = d3.svg.axis()
.scale(x)
.orient('bottom');
main.append('g')
.attr('transform', 'translate(0,' + height + ')')
.attr('class', 'main axis date')
.call(xAxis);
// draw the y axis
var yAxis = d3.svg.axis()
.scale(y)
.orient('left');
main.append('g')
.attr('transform', 'translate(0,0)')
.attr('class', 'main axis date')
.call(yAxis);
var g = main.append("svg:g");
g.selectAll("scatter-dots")
.data(data)
.enter().append("svg:circle")
.attr("cx", function (d,i) { return x(d[0]); } )
.attr("cy", function (d) { return y(d[1]); } )
.attr("r", 8);
</script>
</body>
</html>
【问题讨论】:
-
您要实现的最终用例是什么?
-
我想将数据从视图流式传输到模板
-
您是否按照@Wolkodav 的建议查看过 StreamingHttpResponse ?
-
是的,目前还不清楚如何使用
-
您想传输什么样的数据?
标签: javascript python django django-views