【问题标题】:How to fire a Javascript alert and then redirect the page after user clicks 'ok' in Django?用户在 Django 中单击“确定”后如何触发 Javascript 警报然后重定向页面?
【发布时间】:2014-02-02 16:01:24
【问题描述】:

我的 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))

【问题讨论】:

    标签: javascript python django


    【解决方案1】:

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

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

    注意几点:

    1. 这有点误导,因为它会提醒用户他们的消息已发送,即使 如果它实际上没有被发送(它从不与服务器检查以确保)。所以,如果表单出现错误,肯定会误导用户。

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

    这就是快速而肮脏的解决方案。不过,我建议改用 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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2019-10-27
      相关资源
      最近更新 更多