Django:在视图中组合方法和类来共享相同的URL

时间:2017-04-27 05:02:15

标签: django

我正在开发Django项目,我有一个应用程序,其中有一个下拉页面和一个从数据生成的图表(从数据库中查询并传递到API网址)。我使用基于类的视图和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 / graph时,下拉工作但图表没有。我可以告诉它是因为在我的urls.py中,我为每个类和方法都有单独的URL,因此它们只能在各自的URL下工作。

但是,我想将它们组合在一起,以便图形的生成和下拉列表的工作在一个url下工作,这将是/ display。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果您希望它们成为同一页面的一部分,则两个功能都应位于一个视图下的表单内。如果没有,则不应该有一个单独的URL用于两个单独的功能。你的问题有点含糊不清。如果您能清楚地说明功能,那将会很有帮助。