2014-02-02 3 views
1

У меня есть контактная форма на моем сайте Django. Когда кто-то нажимает кнопку submit, я хотел бы использовать предупреждение Javascript, чтобы сообщить им, что их сообщение было отправлено, а затем перенаправить их обратно на главную страницу. Я настроил часть HttpResponseRedirect на мой взгляд, но я изо всех сил пытаюсь заставить JS-произведение работать вместе. Вот мой views.py:Как запустить Javascript-предупреждение, а затем перенаправить страницу после того, как пользователь нажимает «ОК» в Django?

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

В шаблоне, вы могли бы использовать что-то же просто, как это (использует некоторые JQuery):

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

Примечание несколько вещей:

  1. Это немного вводит в заблуждение, так как оно предупреждает пользователя о том, что их сообщение было отправлено, даже , если он фактически не отправляется (он никогда не проверяет с сервером, чтобы убедиться). Таким образом, если в форме была некоторая ошибка, это, безусловно, вводит пользователя в заблуждение.

  2. Это оповещение будет связываться с формой на странице, поэтому может быть лучше настроить таргетинг на конкретную форму с ее идентификатором.

Так вот, это быстрое и грязное решение. Я бы рекомендовал вместо этого использовать Django's 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 %} 
Смежные вопросы