【问题标题】:Django + save (newsletter) form in ajaxajax 中的 Django + 保存(时事通讯)表单
【发布时间】:2013-10-02 20:16:39
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery ajax django newsletter


    【解决方案1】:

    如果你必须为此使用 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 %}
    

    【讨论】:

      猜你喜欢
      • 2015-08-25
      • 2015-06-06
      • 2020-03-04
      • 2012-01-07
      • 2020-07-31
      • 2021-12-24
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多