Django:在视图内部组合方法和类以共享同一url
我正在Django项目中工作,我有一个应用程序,它有一个带有下拉列表的页面和一个从数据生成的图表(从数据库查询并传递到API url)。我使用基于类的视图和APIView,有一个get方法,它创建一个响应,将一些Json数据传递到url中。我在我的views.py中设置并运行了以下类 views.pyDjango:在视图内部组合方法和类以共享同一url,django,Django,我正在Django项目中工作,我有一个应用程序,它有一个带有下拉列表的页面和一个从数据生成的图表(从数据库查询并传递到API url)。我使用基于类的视图和APIView,有一个get方法,它创建一个响应,将一些Json数据传递到url中。我在我的views.py中设置并运行了以下类 views.py class ChartData(APIView): authentication_classes = [] permission_classes = [] def get
class ChartData(APIView):
authentication_classes = []
permission_classes = []
def get(self, request, format=None):
#generated through code
data = {
"labels": all_times,
"default": all_data,
}
return Response(data)
def DropdownDisplay(request):
items= #query from database
if (request.method == 'POST' and request.is_ajax()):
print(request.POST)
return render(request, 'DisplayData/Display.html',{'dropdown':items})
为了访问此数据,我将url设置为:
url(r'^display/api/chart/data/$', views.ChartData.as_view()),
API中的这些数据用于在此应用程序的我的html模板中生成ChartJS图。图表被设置为从url display/api/chart/data/中查找Json数据,并使用Ajax填充自身。以下是图表的生成方式:
<script>
{% block jquery %}
var endpoint = 'display/api/chart/data/'
var defaultData = []
var defaultLabels = [];
$.ajax({
method: "GET",
url: endpoint,
success: function(data){
defaultLabels = data.labels
defaultData = data.default
console.log(data)
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: defaultLabels,
datasets: [{
label: '# Measurable',
data: defaultData,
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
},
error: function(error_data){
console.log("error")
console.log(error_data)
}
})
{% endblock %}
</script>
此方法用于在页面中生成下拉列表。此url设置在相同的url.py文件中,如下所示:
url(r'^graph/', views.DropdownDisplay, name='Display-Dropdown')
注意:它们在同一个views.py和url.py文件中,为了便于格式化,我在本文中将它们分开
现在,我遇到了一个问题。当我转到/display时,图形工作,但下拉菜单不工作。当我转到/display/graph时,下拉菜单起作用,但图形不起作用。我知道这是因为在我的url.py中,每个类和方法都有单独的url,所以它们只能在各自的url下工作
但是,我希望将它们结合起来,以便图形的生成和下拉列表的填充都在一个url下工作,该url将是/display
如何实现这一点?如果希望它们成为同一页面的一部分,则两个功能应位于同一视图下的表单中。如果没有,则两个单独的功能不应该只有一个url。你的问题有点模棱两可。如果您能清楚地说明功能,将非常有用。基本上,我需要通过ChartData类生成REST API,但我还需要调用DropdownDisplay方法来填充下拉列表。我在问如何将它们结合起来,以便在同一页中同时完成这两项工作。