Django 如何创建一个折线图,指示用户在哪个月写了更多或更少的博客?
这就是我想要的输出- 根据上面的图表,用户在3月到4月之间写了很多帖子,然后在7月这个数字就减少了 我曾使用过表格和饼图,但无法使这一个工作。以下是可用于此目的的Django模型示例:Django 如何创建一个折线图,指示用户在哪个月写了更多或更少的博客?,django,chart.js,Django,Chart.js,这就是我想要的输出- 根据上面的图表,用户在3月到4月之间写了很多帖子,然后在7月这个数字就减少了 我曾使用过表格和饼图,但无法使这一个工作。以下是可用于此目的的Django模型示例: class Blog(models.Model): title = models.CharField(max_length=160) ... created_at = models.DateTimeField(auto_now_add=True) 我知道这里要使用的数据可以从creat
class Blog(models.Model):
title = models.CharField(max_length=160)
...
created_at = models.DateTimeField(auto_now_add=True)
我知道这里要使用的数据可以从created_at
字段中提取,但我不知道如何执行JavaScript
部分。如果我在模板中传递{“blogs”:Blog.objects.all()}
上下文,我如何像线栏一样在上面打印。请帮忙
谢谢。因为您正在使用Django,所以我将使用 在your views.py中:
import plotly.offline as pyo
import plotly.graph_objs as go
import datetime as dt
import calendar
time_values = Blog.objects.all().order_by("created_at")
time_values = [ element.created_at for element in time_values ]
time_values = [ element.month for element in time_values ]
published_amounts = [ 1 for element in time_values ]
new_time_values = [ time_values[0] ]
published_amounts = [ 0 ]
j=0
# the cycle prevents mixing months from different years
for i in range( 1, len(time_values) ):
if time_values[i]==time_values[i-1]:
published_amounts[j] = published_amounts[j] + 1
else:
new_time_values.append(time_values[i])
published_amounts.append(1)
j=j+1
new_time_values = [calendar.month_name[element] for element in new_time_values ]
post_line = go.Scatter(
x=new_time_values,
y=published_amounts,
mode='lines+markers',
name="Published posts",
)
data = [ post_line, ]
layout = go.Layout(showlegend=True, )
fig = go.Figure(data=data, layout=layout)
plt_div = pyo.plot(fig, output_type='div')
context_dict={
"plt_div":plt_div
}
return render(request, 'your_page.html', context_dict)
然后,在模板中,您只需将
{{plt_div}}
您希望图形显示在何处。那么您希望每月按
cleaning\u分组的博客数量
?是的,表示用户在哪个月发布了多少博客,但使用折线图屏幕截图看起来像chartjs,请参阅感谢您花时间回答。我得到了这个错误'int'对象不可调用
从这一行时间值=[element.month()对于时间值中的元素]
我尝试了其他方法,但都不起作用。monthI之前做了这件事,但我一直得到错误<代码>列表索引超出范围在'if time\u values[i]==time\u values[i]:`line中。我想现在它可以工作了。请再次复制并粘贴我的答案。谢谢你,兄弟,我标记了chart.js
,因为我期待它来自chart.js。这是一个很好的解决方案,但缺少一些解释,因为我以前从未使用过potly
,不过还是要谢谢你。