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」にあり、可能であればテンプレートタグまたは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 に答える