Pregunta

I want to make a newsletter system with django + ajax Actually, i've got:

#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()

and on 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>

I'm lost for create my function with an ajax for return if user has already her email save on my database or message of success saved Can you do help me for create this? Please note my form is on my "base.html" and i don't want to use if possible templatetags or forms.py system. But i follow your code if you can help me

¿Fue útil?

Solución

If you must use ajax for this, then I recommend using jQuery's $.ajax() function. This page has a good writeup on django + ajax which helped me a lot.

You don't need ajax for this though. You can avoid forms if you really want to but not template tags. I think this should do what you want, or at least push you in the right direction.

# 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')

And somewhere in base.html:

{% if error %}
    <p class='error-msg'>{{ error }}</p>
{% endif %}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top