繁体   English   中英

当用户在Django中单击“确定”后,如何触发Javascript警报,然后重定向页面?

[英]How to fire a Javascript alert and then redirect the page after user clicks 'ok' in 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))

在模板中,您可以使用以下简单的内容(使用一些jQuery):

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

请注意以下几点:

  1. 这有点误导,因为它警告用户他们的消息已经发送,即使实际上没有发送(它也不会与服务器进行确认)。 因此,如果表单中存在某些错误,则肯定会误导用户。

  2. 该警报将绑定到页面上的任何表单,因此最好将特定表单及其ID作为目标。

这就是快速而又肮脏的解决方案。 不过,我建议改用Django的消息框架 基本上,您不会使用任何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 %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM