【发布时间】:2017-04-27 05:02:14
【问题描述】:
我正在开发 Django 项目,我有一个应用程序,该应用程序有一个带有下拉菜单的页面和一个从数据生成的图表(从数据库中查询并传递到 API url)。我正在使用基于类的视图和 APIView 并且有一个 get 方法,它创建一个响应以将一些 Json 数据传递到一个 url。我的views.py中有以下课程设置和工作。
views.py
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)
为了访问这些数据,我将我的网址设置为:
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>
我在同一个视图文件中还有另一种方法,如下所示:
views.py
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 在同一个 urls.py 文件中设置如下:
url(r'^graph/', views.DropdownDisplay, name='Display-Dropdown')
注意:它们在同一个views.py 和urls.py 文件中,我只是为了格式化而在这篇文章中将它们分开。
现在,我遇到了一个问题。当我转到 /display 时,图表有效,但下拉菜单无效。当我转到 /display/graph 时,下拉菜单有效,但图形无效。我可以说这是因为在我的 urls.py 中,每个类和方法都有单独的 url,所以它们只能在各自的 url 下工作。
但是,我想将它们结合起来,以便图形的生成和下拉列表的填充都在一个 url 下工作,这将是 /display。
我该如何实现这一目标?
【问题讨论】:
标签: django