【问题标题】:Parameter required for django view with json decorator - how?带有 json 装饰器的 django 视图所需的参数 - 如何?
【发布时间】:2014-10-20 15:48:14
【问题描述】:

我有一个带有表单文本字段/按钮的 django 页面 (search_form.html),该页面触发了一个操作,该操作会使用输入的值搜索数据库。结果显示在另一个 django 页面 (search_results.html)。 search_form.html 中的表单 sn-p 如下所示:

    <form action="/datest/partner_search/" method="get">
        <label class="control-label">Partner ID</label>
        <input type="text" name="partnerQ">
        <input type="submit" value="Partner Search">
    </form>

我的应用中有以下内容urls.py

url(r'^search_form/$', views.search_form, name='search_form'),
url(r'^search_results/$', views.search_results, name='search_results'),

我在 views.py

中有以下内容
def partner_search(request):
    error = False
    if 'partnerQ' in request.GET:
        q = request.GET['partnerQ']
        if not q:
            error = True
        else:
            my_data = MyTable.objects.filter(dbField__icontains=q)
            return render(request, 'myapp/search_results.html', {'mydata': my_data, 'query': q})
    return render(request, 'myapp/search_form.html', {'error': error})

这没问题,但是当我想在结果页面中包含一个 jqplot 图表时,我的问题就出现了,但是要在图表上绘制的数据需要一个基于传递给上述 views.py 方法的 partnerQ 字符串的数据库查询.所以我有一个单独的方法,旨在在我的views.py 中为jqplot 创建JSON 数据。所以 urls.py 中的附加条目如下所示:

url(r'^my_plot_json/$', views.my_plot_json, name='my_plot_json'),

views.py 方法(仍然需要从搜索字段中获取字符串 - 不知道如何捕获)如下所示。注意 - 我知道这行不通,因为我还没有通过 q

@render_to_json()
def my_plot_json(request):
    mydata = MyTable.objects.values("iDate").filter(dbField__icontains=q).annotate(Count("id"))
    jsondataset = [[str(z['iDate']), z['id__count']] for z in mydata]
    return [jsondataset]

对应的javascript sn-p如下所示:

function populateGraph() {
    $.get('/myapp/my_plot_json', function(data) { drawTwelveMonthPlot(data); });
}

所以我总结的问题是这个_我需要执行一个单独的数据库查询来为我的 jqPlot 图生成 JSON 数据,但我不知道如何捕获在 my_plot_json 的表单字段中输入的搜索字符串方法。我看到的选项可能是:

  1. partner_search 方法内对 my_plot_json 的调用中传递字符串?
  2. 是否有两个动作归因于我的表单域,所以这两个例程都会被触发?

我不知道其中任何一个是否可行,诚然,我是一个 python/django 新手,所以如果可能的话,我会很感激 code-sn-p 风格的解决方案。非常感谢。

【问题讨论】:

    标签: javascript python json django jqplot


    【解决方案1】:

    各种解决方案浮现在脑海中,但最简单的肯定是在 partner_search 方法本身中生成 json,并将其与其他参数一起传递给模板。然后,您可以使用该数据直接调用drawTwelveMonthPlot,而不是对其进行单独的 Ajax 请求。

    编辑

    我真的不明白你不明白什么。您有一个函数populateGraph,它只包含一个Ajax 调用,并且该Ajax 调用的结果被传递给drawTwelveMonthPlot。因此,您可以简单地从该 Ajax 调用中调用 drawTwelveMonthPlot 并直接调用它,并将模板中的 JSON 传递给它。

    function populateGraph() {
        var data = '{{ json_data_from_view|safe }}'
        drawTwelveMonthPlot(data);
    }
    

    假设 JS 在你的 Django 模板中;如果不是,您可以将var data... 行放入模板中的&lt;script&gt; 元素中,其余部分仍然有效。

    【讨论】:

    • 感谢 Daniel,但我完全不确定如何直接调用 Javascript。就目前情况而言,HTML 只是有一个在 drawTwelveMonthPlot 中使用的 div ID。如果我需要的 JSON 数据不在上面的 URL (/myapp/my_plot_json) 中,那么我不确定我还能如何将数据传递给它以进行绘图。很抱歉让您感到痛苦 - 新手警报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2015-03-07
    • 2010-11-28
    • 2020-12-01
    • 2014-07-21
    • 2021-10-11
    • 2013-01-10
    相关资源
    最近更新 更多