我有一个django页面( search_form.html ),其中包含一个表单文本字段/按钮,用于触发一个操作,并使用输入的值搜索数据库。结果显示在另一个django页面上( search_results.html )。 search_form.html 的表单摘要如下所示:
<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代码段如下所示:
function populateGraph() {
$.get('/myapp/my_plot_json', function(data) { drawTwelveMonthPlot(data); });
}
所以我的问题总结是这个_我需要执行一个单独的数据库查询来为我的jqPlot图生成JSON数据但我无法弄清楚如何捕获在my_plot_json的表单字段中输入的搜索字符串方法。我看到的选项可能是:
我不知道其中任何一个是否可能并且不可否认,我是一个python / django新手,所以如果可能的话,我会很感激代码片段式解决方案。非常感谢提前。
答案 0 :(得分:0)
我想到了各种解决方案,但最简单的方法就是在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...
行放在模板中的<script>
元素中,其余部分仍可使用。