0

我想用 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 系统。但如果你能帮助我,我会遵循你的代码

4

1 回答 1

0

如果你必须为此使用 ajax,那么我推荐使用 jQuery 的 $.ajax() 函数。这个页面有一篇关于 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 %}
于 2013-09-27T09:35:11.743 回答