如何在用户点击Django中的'ok'后触发Javascript警报,然后重定向页面?

时间:2014-02-02 16:01:24

标签: javascript python django

我在Django网站上有联系表格。当有人点击提交时,我想使用Javascript警报通知他们他们的消息已被发送,然后将其重定向到主页。我在我的视图中设置了HttpResponseRedirect部分,但我很难让JS部分同时工作。这是我的views.py:

from datetime import date
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
from django.shortcuts import render_to_response
from .form import ContactUsForm

def contact(request):
    form = ContactUsForm(request.POST or None)
    if form.is_valid():
        this_form = form.save(commit=False)
        this_form.save()
        return HttpResponseRedirect('/')

    return render_to_response('contact/form.html', locals(), context_instance=RequestContext(request))

1 个答案:

答案 0 :(得分:0)

在你的模板中,你可以使用像这样简单的东西(使用一些jQuery):

$(function()
{
    $('form').on('submit', function(){
        alert('Your message has been sent!');
    });
});

请注意以下几点:

  1. 这有点误导,因为它提醒用户他们的消息已被发送,甚至 如果它实际上没有被发送(它永远不会检查服务器以确保)。因此,如果表单中存在某些错误,这肯定会误导用户。

  2. 此警告将绑定到页面上的任何表单,因此最好使用其ID定位特定表单。

  3. 这就是快速而肮脏的解决方案。不过,我建议使用Django的messages framework代替。基本上,您不会使用任何Javascript来提交表单,而是在您的视图中添加这样的内容:

    from django.contrib import messages
    messages.success(request, 'Message sent.')
    

    然后在您的模板中(最好将其添加到您的基本模板中,以便它显示在用户所在的任何位置,因为消息会在每次页面加载时到期:

    {% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
    {% endif %}