如何配置我的ajax / views函数以返回字典

时间:2017-04-13 20:17:29

标签: jquery python ajax django

所以我有以下带有ajax请求的html:

  <script>
  $("#search_button").on("click", function(){
            var start_date = $("input[name=\"startdate\"]").val();
            var end_date = $("input[name=\"enddate\"]").val();
            var machine_id = $("#machine_id").val();
//            console.log(start_date);
//            console.log(end_date);
//            console.log(machine_id);
            $.ajax({
                url: ('/reports/machine_search'),
                type: 'POST',
                data: {'start_date': start_date, 'end_date': end_date, 'machine_id': machine_id},
                success: function(data) {
                    console.log(data);
                }
            });
        })
</script>

这是我的url.py文件,其中包含相应的网址&#39; / reports / machine_search&#39;:

from django.conf.urls import url
from . import views
from django.views.decorators.csrf import csrf_exempt

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^dashboard', views.dashboard, name='dashboard'),
    url(r'^login', views.login, name='login'),
    url(r'reports', views.reports, name='reports'),
    url(r'^logout/$', views.logout_view, name='logout'),
    url(r'^reports/machine_search', csrf_exempt(views.machine_search), name='machine_search'),
    url(r'^test', views.my_view)
]

然后是相应的视图文件:

@login_required
@csrf_exempt
def machine_search(request):
    test = request.data['start_date']
    print(test)
    run_response = {'test1': 'placeholder1',
                   'test2': 'placeholder2'}
    return JsonResponse(run_response)

我的问题是,暂时我只想让ajax请求返回在我的views函数中创建的字典。但是,在我的ajax成功线上,我在console.log响应,在我的控制台中,我收到了当前页面的整个html,我正在制作我的ajax请求。我错在哪里或哪里?我只是希望我的请求从views函数返回一个字典,并能够在我的HTML中访问它。在此先感谢,如果我能澄清任何事情,请告诉我。

1 个答案:

答案 0 :(得分:0)

我相信会发生的事情是你的ajax调用的reports/machine_search网址会触发你的urls.py中的reports网址,这可能就是你所在的页面,所以你得到了所有那个HTML。

一种解决方案是在报告末尾添加$,以便它只匹配reports而不是reports/machine_search

url(r'reports$', views.reports, name='reports'),

另一种方法是将reports/machine_search置于reports之上。