如何使用Django,Ajax,jQuery提交表单而不刷新页面?

我是django的新手。 我需要简单的例子。 如何使用Django,Ajax,jQuery提交表单(post)而不刷新页面?

这是我的表单,视图和模板:

views.py

from django.shortcuts import * from django.template import RequestContext from linki.forms import * def advert(request): if request.method == "POST": form = AdvertForm(request.POST) if(form.is_valid()): print(request.POST['title']) message = request.POST['title'] else: message = 'something wrong!' return render_to_response('contact/advert.html', {'message':message}, context_instance=RequestContext(request)) else: return render_to_response('contact/advert.html', {'form':AdvertForm()}, context_instance=RequestContext(request)) 

forms.py(使用“ModelForm”表单)

 from django import forms from django.forms import ModelForm from linki.models import Advert class AdvertForm(ModelForm): class Meta: model = Advert 

模板(formsHTML代码)

     

Leave a Suggestion Here

{% if message %} {{ message }} {% endif %}
{% csrf_token %} {{ form.as_p }}

如果你打算用jquery使用ajax提交,你不应该从你的视图中返回html ..我建议你这样做:

HTML:

     

Leave a Suggestion Here

{% csrf_token %} {{ form.as_p }}

js

 $('#form').submit(function(e){ $.post('/url/', $(this).serialize(), function(data){ ... $('.message').html(data.message); // of course you can do something more fancy with your respone }); e.preventDefault(); }); 

views.py

 import json from django.shortcuts import * from django.template import RequestContext from linki.forms import * def advert(request): if request.method == "POST": form = AdvertForm(request.POST) message = 'something wrong!' if(form.is_valid()): print(request.POST['title']) message = request.POST['title'] return HttpResponse(json.dumps({'message': message})) return render_to_response('contact/advert.html', {'form':AdvertForm()}, RequestContext(request)) 

这样你就可以将响应放在message div中。 而不是返回普通的HTML,你应该返回json。

  
 $('#form-id').submit(function(e){ $.post('your/url', $(this).serialize(), function(e){ ... }); e.preventDefault(); });