【问题标题】:Django: combining method and class inside views to share same urlDjango:在视图中组合方法和类以共享相同的 url
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 基本上,我需要通过 ChartData 类生成 REST API,但我还需要调用 DropdownDisplay 方法来填充下拉列表。我在问如何将它们结合起来,以便我可以在同一页面中同时进行。
    猜你喜欢
    • 2016-10-13
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2016-08-31
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多