我在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))
答案 0 :(得分:0)
在你的模板中,你可以使用像这样简单的东西(使用一些jQuery):
$(function()
{
$('form').on('submit', function(){
alert('Your message has been sent!');
});
});
请注意以下几点:
这有点误导,因为它提醒用户他们的消息已被发送,甚至 如果它实际上没有被发送(它永远不会检查服务器以确保)。因此,如果表单中存在某些错误,这肯定会误导用户。
此警告将绑定到页面上的任何表单,因此最好使用其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 %}