2015-11-25 3 views
3

Я использую такие виды для обработки модальных окон с формой. Вы можете проверить подробное объяснение этого подхода здесь. https://dmorgan.info/posts/django-views-bootstrap-modals/ Все работает нормально, но представленные данные не отображаются в представлении my_orders после перенаправление на это представление. Я вижу запрос GET в/my_orders/в консоли Chrome. И ответ содержит представленные данные. Но кажется, что этот ответ не кажется на мой взгляд. Может быть, это вызвано ответом XHR?Перенаправленная страница не отображается после отправки модальной формы

В то же время перенаправление отлично работает в этом методе, и после перенаправления у меня есть фактическое представление my_orders.

def delete_order(request, id): 
    Order.objects.filter(id = id).delete() 
    return redirect('currency_exchange.views.my_orders') 

views.py

def my_orders(request): 
    queryset = Order.objects.filter(user=get_user(request)) 
    context = { 
      "queryset": queryset 
     } 
    return render(request, "my_orders.html", context) 

class AjaxTemplateMixin(object): 

    def dispatch(self, request, *args, **kwargs): 
     if not hasattr(self, 'ajax_template_name'): 
      split = self.template_name.split('.html') 
      split[-1] = '_inner' 
      split.append('.html') 
      self.ajax_template_name = ''.join(split) 
     if request.is_ajax(): 
      self.template_name = self.ajax_template_name 
     return super(AjaxTemplateMixin, self).dispatch(request, *args, **kwargs) 

class AddOrderView(SuccessMessageMixin, AjaxTemplateMixin, FormView, CreateView): 
    model = Order 
    template_name = 'add_order_form.html' 
    form_class = OrderForm 
    success_url = reverse_lazy('my_orders') 
    success_message = "Way to go!" 

    def form_valid(self, form): 
     order = form.save(commit=False) 
     order.user = self.request.user 
     order.save() 
     return redirect('currency_exchange.views.my_orders') 

JS:

var formAjaxSubmit = function(form, modal) { 
       $(form).submit(function (e) { 
        e.preventDefault(); 
        $.ajax({ 
         type: $(this).attr('method'), 
         url: $(this).attr('action'), 
         data: $(this).serialize(), 
         success: function (xhr, ajaxOptions, thrownError) { 
          if ($(xhr).find('.has-error').length > 0) { 
           $(modal).find('.modal-body').html(xhr); 
           formAjaxSubmit(form, modal); 
          } else { 
           $(modal).modal('toggle'); 
          } 
         }, 
         error: function (xhr, ajaxOptions, thrownError) { 
         } 
        }); 
       }); 
      } 

ответ

0

Вы не показывать JS. Но если вы отправляете запрос Ajax, вам нужно что-то сделать в JS-коде, чтобы на самом деле сделать перенаправление.

+0

Добавить JS на вопрос –

+0

OK. Итак, где в этом JS-коде есть то, что изменяет URL-адрес? –

+0

Вещь, которая изменяет URL-адрес, находится в коде python: 'return redirect ('currency_exchange.views.my_orders')'. По крайней мере, он работает В случае 'def delete_order()' –

Смежные вопросы