【发布时间】:2019-08-09 08:24:55
【问题描述】:
我尝试了两种不同风格的视图:基于函数和基于类。我的views.py 中有两个函数,我不知道如何在同一个url 下调用它们。我已经看到将这两个功能合二为一的建议,但它仍然不起作用。
从基于类的视图中尝试 get() 并用不同的视图调用相同的 url
path('home/dashboard/', views.get_profile, name='dashboard'),
path('home/dashboard/', views.get_dept, name='dashboard'),
def get_dept(request, *args, **kwargs):
dataset = Department.objects.all() \
.values('department') \
.annotate(IT_count=Count('department',
filter=Q(department="IT")),
Sales_count=Count('department',
filter=Q(department="Sales")),
Admin_count=Count('department',
filter=Q(department="Admin")),
HR_count=Count('department',
filter=Q(department="HR"))) \
.order_by('department')
categories = list()
IT_series_data = list()
Sales_series_data = list()
Admin_series_data = list()
HR_series_data = list()
for entry in dataset:
categories.append('%s Department' % entry['department'])
IT_series_data.append(entry['IT_count'])
Sales_series_data.append(entry['Sales_count'])
Admin_series_data.append(entry['Admin_count'])
HR_series_data.append(entry['HR_count'])
IT_series = {
'name': 'IT',
'data': IT_series_data,
'color': 'green'
}
Sales_series = {
'name': 'Sales',
'data': Sales_series_data,
'color': 'yellow'
}
Admin_series = {
'name': 'Admin',
'data': Admin_series_data,
'color': 'red'
}
HR_series = {
'name': 'HR',
'data': HR_series_data,
'color': 'blue'
}
chart2 = {
'chart': {
'type': 'column',
'backgroundColor': '#E3F0E6',
'option3d': {
'enabled': "true",
'alpha': 10,
'beta': 15,
'depth': 50,
}
},
'title': {'text': 'Containers per department'},
'xAxis': {'categories': categories},
'yAxis': {
'title': {
'text': 'No.of containers'},
'tickInterval': 1
},
'plotOptions': {
'column': {
'pointPadding': 0.2,
'borderWidth': 0,
'depth': 60,
}
},
'series': [IT_series, Sales_series, Admin_series, HR_series],
'colorByPoint': "true",
}
dump2 = json.dumps(chart2)
return render(request, 'accounts/dashboard.html', {'chart2': dump2})
def get_profile(request, *args, **kwargs):
dataset = Profile.objects \
.values('is_active') \
.annotate(is_active_count=Count('is_active', filter=Q(is_active=True)),
not_is_active_count=Count('is_active', filter=Q(is_active=False))) \
# categories = list('User')
is_active_series_data = list()
not_is_active_series_data = list()
for entry in dataset:
# categories.append('User')
is_active_series_data.append(entry['is_active_count'])
not_is_active_series_data.append(entry['not_is_active_count'])
is_active_series = {
'name': 'Active user',
'data': is_active_series_data,
'color': '#23CE3F'
}
not_is_active_series = {
'name': 'Inactive user',
'data': not_is_active_series_data,
'color': '#FB3A3A'
}
chart = {
'chart': {
'type': 'column',
'backgroundColor': '#E3F0E6',
'options3d': {
'enabled': "true",
'alpha': 10,
'beta': 15,
'depth': 50,
}
},
'title': {'text': 'Active user on Current Platform'},
'xAxis': {'categories': ['Active', 'Inactive']},
'yAxis': {
'title': {
'text': 'No.of users'},
'tickInterval': 1
},
'plotOptions': {
'column': {
'pointPadding': 0.2,
'borderWidth': 0,
'depth': 60,
}
},
'series': [is_active_series, not_is_active_series]
}
dump = json.dumps(chart)
return render(request, 'accounts/dashboard.html', {'chart': dump})
【问题讨论】:
-
您的意思是您希望用户转到一个 GET URL,然后 Django 呈现两个视图?我不认为这是可能的。 Django 通常在 URL 和“do stuff”函数之间有 1:1 的映射。您可以将 GET 和 POST 的 URL 分开,因此您有一个路由和一个视图用于 GET,一个路由和一个视图用于 POST(具有相同的路由路径)但是如果您想在仪表板中显示图表和图表 2,那么您需要通过conext 中的两个图表作为单独的变量,然后您的仪表板视图将显示它们
标签: python html django highcharts