Jquery 在新窗口中向django视图发送AJAX帖子

Jquery 在新窗口中向django视图发送AJAX帖子,jquery,ajax,django,Jquery,Ajax,Django,我试图将一些表单变量从CreateView传递到TemplateView,TemplateView的作用类似于预览,并呈现存储在request.session中的变量。我想在新窗口中打开预览。如果没有ajax帖子,预览会加载得很好。但是,当我在ajax帖子中添加内容时,窗口将打开,而不会传递帖子数据 窗口在没有post数据的情况下打开。在视图中,将忽略表单_valid。我做错了什么 有没有更好的办法?我应该在jquery中捕获submit事件而不是单击按钮吗 CreateView: def fo

我试图将一些表单变量从CreateView传递到TemplateView,TemplateView的作用类似于预览,并呈现存储在request.session中的变量。我想在新窗口中打开预览。如果没有ajax帖子,预览会加载得很好。但是,当我在ajax帖子中添加内容时,窗口将打开,而不会传递帖子数据

窗口在没有post数据的情况下打开。在视图中,将忽略表单_valid。我做错了什么

有没有更好的办法?我应该在jquery中捕获submit事件而不是单击按钮吗

CreateView:

def form_valid(self, form):
    if form.is_valid():
        if self.request.POST.get('submit'):
            self.object = form.save(commit=False)
            self.object.profile = self.request.user.get_profile()
            self.object.save()
            return super(InvoiceCreateView, self).form_valid(form)
        elif self.request.POST.get('preview') and self.request.is_ajax():
            data = form.cleaned_data
            # Obtain form data, redirect only if template is not empty
            if data['template'] and data['customer']:
                self.request.session['template'] = data['template']
                self.request.session['customer'] = data['customer']
                return redirect('invoices:invoice_preview')
            else:
                messages.error(request, u"Unable to preview")
                return self.render_to_response(self.get_context_data(form=form))
    else:
        messages.error(self.request, u"Invoice creation failed")
        return self.render_to_response(self.get_context_data(form=form))
js:

编辑预览视图:

def get_context_data(self, **kwargs):
    context = super(InvoicePreview, self).get_context_data(**kwargs)
    try:
        context['preview'] = True
        context['template'] = self.request.session['template']
        context['customer'] = self.request.session['event']
        context['preview_message'] = self.request.session['preview_message']
    except KeyError:
        return Http404 # just throw 404 if cookie fails
    return context

Preview使用会话中传递的变量来呈现一些内容,很明显,在模板中,css+html文件引用是根据用户的选择存储和返回的。因此,如果没有ajax帖子,预览实际上会正确渲染。然而,当使用ajax时,我得到一个类型为“type”的参数是不可编辑的。

您通过invoices访问的视图是什么:invoices\u preview到底在做什么?如果你直接访问它的url,它能工作吗?看起来您也不需要if表单。是否有效。。。与一般CreateView中一样,只有在表单有效时才会调用方法form_valid…查看服务器响应中的内容:error:functionerr{console.logerr;}。您是否已将{csrf_token}}模板标记添加到模板中?@BernhardVallant我已添加预览视图,它只是一个模板视图。dan klasson:没有服务器响应,最初我有403,但我用一些js解决了csrf问题。
def get_context_data(self, **kwargs):
    context = super(InvoicePreview, self).get_context_data(**kwargs)
    try:
        context['preview'] = True
        context['template'] = self.request.session['template']
        context['customer'] = self.request.session['event']
        context['preview_message'] = self.request.session['preview_message']
    except KeyError:
        return Http404 # just throw 404 if cookie fails
    return context