В моем приложении django я ввожу форму. Как только эта форма проверена, я показываю сообщение об успехе с помощью Структура сообщений Django.
Текущее состояние
Я могу отобразить сообщение об успехе в шаблоне после отправки формы, когда я перенаправляю его на тот же URL-адрес (URL-адрес самой формы)
Мой views.py
if form.is_valid():
form_data = form.save()
messages.success(request, 'Submited Successfully')
return redirect('form-url')
Что я хочу
После отправки формы я хочу отобразить сообщение об успехе на той же странице (form-url
), а затем я хочу перенаправить на новый URL-адрес list-of-submitted-forms
.
Для этого я сделал что-то подобное со своим views.py
if form.is_valid():
form_data = form.save()
messages.success(request, 'Submited Successfully')
return redirect('list-of-submitted-forms')
Проблема, с которой я столкнулся
Я перенаправляю на новый URL-адрес, но не получаю сообщения об успешном завершении на странице form-url
. Также, когда я перехожу на страницу form-url
(нажав кнопку, которая перенаправляет на этот URL-адрес), отображается сообщение 'Submited Successfully'
Мой HTML / JS
<script>
{% if messages %}
{% for message in messages %}
{% if message.tags == "success" %}
swal({text:"{{ message }}",icon: "success",timer: "4000",buttons: false})
{% endif %}
{% endfor %}
{% endif %}
Означает, что я должен внести изменения в свой шаблон, и, поскольку там есть views.py, я должен придерживаться redirect('form-url
) - это то, что вы говорите Исправьте меня, если я ошибаюсь
отправьте вам html-коды, я сделаю это с
Есть много способов делать то, что вы хотите, я показываю вам способ сделать это с помощью JsonResponse
.
взгляды
from django.http import JsonRespon
from django.core.urlresolvers import reverse
if form.is_valid():
form_data = form.save()
response = {'msg':'Submited Successfully',
'url':reverse('list-of-submitted-forms'),
'created':True}
return JsonResponse(response)
js
$("#your_form").submit(function(){
var formData = new FormData($(this)[0]);
$.ajax({
url:"URL",
type:'POST',
data:formData,
processData: false,
contentType: false,
success: function(data){
if (data.created){
alert(data.msg); // handle the message , till the user click ok, and redirect to data.url
window.location.href = data.url;
}
else{
$("your_form").html($("your_form",data));
}
},
error:function(){
alert("error");
}
});
return false;
});
Не могли бы вы также дать другие способы сделать это. Также, пожалуйста, дайте мне знать, если вы хотите что-нибудь еще
вы можете удалить
return redirect('list-of-submitted-forms')
в своем представлении и позволить сообщению отображаться в шаблоне со ссылкой для перенаправления пользователя наlist-of-submitted-forms
, просто щелкнув. скрыть форму, когда вы это сделаете, или сбросить ее