Python 如何在Django中向视图传递大量参数?
我对Django非常陌生,我正在尝试构建一个应用程序,以表和图表的形式展示我的数据。到目前为止,我的学习过程非常顺利,但现在我有点卡住了 My pageview从数据库检索大量数据并将其放入上下文中。然后,模板生成不同的html表。到目前为止还不错。Python 如何在Django中向视图传递大量参数?,python,django,parameters,charts,Python,Django,Parameters,Charts,我对Django非常陌生,我正在尝试构建一个应用程序,以表和图表的形式展示我的数据。到目前为止,我的学习过程非常顺利,但现在我有点卡住了 My pageview从数据库检索大量数据并将其放入上下文中。然后,模板生成不同的html表。到目前为止还不错。 现在我想向模板添加不同的图表。我通过定义标记来实现这一点。Matplotlib图表在我的图表视图中生成,并通过以下方式返回: response=HttpResponse(content_type='image/png') canvas.print_
现在我想向模板添加不同的图表。我通过定义
标记来实现这一点。
Matplotlib图表在我的图表视图中生成,并通过以下方式返回:
response=HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
现在我有不同的问题:
)传递这些数据集参数不是正确的方法。有什么建议吗
无法将数据从页面视图传递到图表视图,因为它们是单独的HTTP请求。您有几个选择:
对于你的第二个问题,一个URL中的20个单词似乎没什么大不了的。当然,您可能会找到所选数据集的一些模式,这样您就不必每次都指定它们,但如果需要,只需创建长URL。使用模板标记可能是我在这里采用的方法。我也遇到过类似的情况,日历信息在同一页面上以不同的格式呈现了多次。我处理它的方式是将查询的数据传递到请求上下文中,然后简单地将该queryset用作模板标记的参数。结果是,您可以使用如下模板语法: 查看
def my_view(request, *args, **kwargs):
yearly_sales_qs = SaleRecord.objects.filter(param=value)
monthly_sales_qs = SalesRecord.objects.filter(param=foo)
return render_to_response( ..., locals(), ... )
模板
{% load data_tags %}
<div class="year">
{% render_data_table for yearly_sales_qs %}
{% render_bar_chart for yearly_sales_qs %}
</div>
<div class="month">
{% render_data_table for monthly_sales_qs %}
{% render_bar_chart for monthly_sales_qs %}
</div>
然后我们可以制作单独的标签来处理我们需要的任何东西
@register.tag
def render_bar_chart(parser, token):
return DataForTag.handle_token(parser, token, 'data/charts/barchart.html')
@register.tag
def render_pie_chart(parser, token):
return DataForTag.handle_token(parser, token, 'data/charts/piechart.html')
@register.tag
def render_data_table(parser, token):
return DataForTag.handle_token(parser, token, 'data/table.html')
谢谢你的回答,内德。Nr 1:那会奏效,但我的直觉告诉我应该有一个更“受人尊敬”的解决方案。Nr2:这就是我想要的。这解决了我遇到的问题,谢谢T·斯通。这可能解决了我的问题。我需要先测试一下才能确定。不管怎样,你的回答让我学到了很多关于标签的知识,如果不是现在,那么在将来,这些都会很有用。
@register.tag
def render_bar_chart(parser, token):
return DataForTag.handle_token(parser, token, 'data/charts/barchart.html')
@register.tag
def render_pie_chart(parser, token):
return DataForTag.handle_token(parser, token, 'data/charts/piechart.html')
@register.tag
def render_data_table(parser, token):
return DataForTag.handle_token(parser, token, 'data/table.html')