在使用jquery post时未调用django formview中的post函数

时间:2018-04-23 19:18:19

标签: jquery ajax django jquery-ui django-forms

当"搜索"时,我必须致电SearchView单击按钮。通过一些打印语句,我可以看到SearchView被调用但SearchView中的后期函数未被调用。

以下是我在SearchView中使用的代码:

    class SearchView(FormView):
        template_name = 'search.html'
        #form_class = SearchForm
        success_url = '/mypage/downloadresult'
        print(" i am inside SearchView")

        def post(self, request, *args, **kwargs):
            # form = self.form_class(request.POST)
            form_class =SearchForm
            form = self.get_form(form_class)
            # form_class = self.get_form_class()
            # form = self.get_form(form_class)
            print(" i am inside post")

            if form.is_valid():
                if self.request.is_ajax():
                   // handle form and generate result

以下是表单的显示视图:

    class DisplayView(FormView):
        template_name = 'search.html'
        form_class = SearchForm
        print(" i am inside displayview")
        success_url = '/sampleapp/search'

当使用上面的DisplayView显示表单时,一旦用户点击"搜索"按钮,SearchView在成功的表单上被调用。

示例应用中的网址格式:

    urlpatterns = [
        #url('', SearchView.as_view()),
        #url('', SearchView.as_view()),
        url('', displayformview.DisplayView.as_view(), name='displayview'),
        url(r'^search/$', SearchView.as_view(), name='search'),
        url(r'^downloadresult/$', downloadresultview.DownloadResultView.as_view(), name='downloadresult')
    ]

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^', include(‘sampleapp.urls')),
    ]

以下是我正在使用的jquery:

 $('#search').click(function(){
    $.post('/sampleapp/search', $(this).serialize(), function(){
        //alert("submit called")
    })
    .done(function(){
        alert("done")
    })
})

我不确定上面的jquery是否真的发送了表单数据。如果有人可以帮助我了解如何使用jquery发送表单数据并成功调用post函数,那将非常有用。

我尝试使用print语句进行调试。我可以看到SearchView中的帖子功能从未被调用过,而且#34;我在帖子中#34;永远不会在控制台中打印"。

2 个答案:

答案 0 :(得分:0)

永远不会调用SearchView,因为您在此处设置的网址$.post('/sampleapp/search'不存在。

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(‘sampleapp.urls')), ---- remove that line
    url(r'^sampleapp/', include(‘sampleapp.urls'))
]

urlpatterns = [
    #url('', SearchView.as_view()),
    #url('', SearchView.as_view()),
    url('', displayformview.DisplayView.as_view(), name='displayview'),
    url(r'^sampleapp/search/$', SearchView.as_view(), name='search'),
    url(r'^downloadresult/$',  downloadresultview.DownloadResultView.as_view(), name='downloadresult')
]

答案 1 :(得分:0)

是的,它现在正在运作。但现在我有另一个问题:

我有搜索按钮,点击后执行搜索。我希望用户能够下载在下载按钮单击时生成的zip文件。我尝试了上面的代码。但是一旦我点击搜索按钮,就会发生下载。下载的文件是.zip,点击后打开.cpgz没有任何数据。

以下是代码:

 def post(self,request,*args, **kwargs):
       zip_dir = "result_for_query_{}.zip".format(query_word)
       s = StringIO.StringIO()
       z = zipfile.ZipFile(s, 'w')
   filename = "{}_{}.txt".format(query_word, doc_id)
   # zip_dir = "result_for_query_{}.zip".format(query_word)
   z = zipfile.ZipFile(zip_dir, 'a')
   self.write_to_file(filename, doc, z)
   z.close()
  response = HttpResponse(s.getvalue(), content_type='application/zip')
  response["Content-Disposition"] = "attachment; filename=%s" % zip_dir
  return response

HTML

下载