Django +保存(简报)表格在ajax中

时间:2013-09-26 18:02:36

标签: javascript jquery ajax django newsletter

我想用django + ajax创建一个新闻通讯系统 实际上,我有:

#newsletter/urls.py
from django.conf.urls import patterns, include, url

urlpatterns = patterns('newsletter.views',
   url(r'^subscribe/', 'subscribe', name='newsletter_subscribe'),
)

#views.py
from django.shortcuts import render_to_response
from newsletter.models import Member


def subscribe(request):
    fullname = request.POST.get('fullname', None)
    email =  request.POST.get('email', None)
    very_exist = Member.objects.all()
    if email in very_exist:
        error = "Votre adresse email est déjà inscrite à la newsletter."

    new_subscriber = Member(fullname=fullname, email=email)
    new_subscriber.save()

和html

<form method="post" action="{% url 'newsletter:newsletter_subscribe' %}" id="frmnewsletter"> {% csrf_token %}
   <div>
       <label for="nltname">Your Name:</label> <input type="text" name="name" class="textboxnewsletter" id="nltname" /><br />
       <label for="nltemail">Email Address:</label> <input type="text" name="email" class="textboxnewsletter" id="nltemail" /><br />
      <input type="submit" name="submitsubscribe" class="submitsubscribe" value="Subscribe" />
      <div class="clear"></div>
   </div>
</form>

如果用户已经将她的电子邮件保存在我的数据库或成功保存的消息上,我就失去了使用ajax创建我的函数 你可以帮助我创造这个吗?请注意我的表格在我的“base.html”上,如果可能的话,我不想使用templatetags或forms.py系统。但如果你可以帮助我,我会按照你的代码

1 个答案:

答案 0 :(得分:0)

如果你必须使用ajax,那么我建议使用jQuery的$ .ajax()函数。 This page对django + ajax有很好的写作,这对我帮助很大。

虽然你不需要ajax。如果你真的想要但不是模板标签,你可以避免使用表格。我认为这应该做你想要的,或者至少让你朝着正确的方向前进。

# views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render

from newsletter.models import Member

def subscribe(request):
    if request.method == 'POST'
        fullname = request.POST['name']
        email =  request.POST['email']
        very_exist = [m.email for m in Member.objects.all()]
        if email in very_exist:
            error = "Votre adresse email est déjà inscrite à la newsletter."
            return HttpResponse({'error': error})
            # return render(request, 'base.html', {'error': error}) # or this, I'm not sure

        new_subscriber = Member(fullname=fullname, email=email)
        new_subscriber.save()

        return HttpResponseRedirect('/success/')

    return render(request, 'base.html')

在base.html的某个地方:

{% if error %}
    <p class='error-msg'>{{ error }}</p>
{% endif %}