Почему, когда я отрисовываю шаблон Django на ajax, успех не появляется в браузере? - PullRequest
0 голосов
/ 21 ноября 2018

Моя HTML-страница не отображается успешно, когда я использую console.log() в js-файле, HTML-страница распечатывается в консоли браузера, но не в самом браузере.

пожалуйста, проверьте мойследующий код:

views.py:

def Filter_by_Products(request):
    if request.is_ajax():
        if request.method == 'GET':
            print("filter by function!")
            filter_brand = request.GET.get('filter_brand')
            products_qs, qs_color, qs_size = product.objects.Filter_brand(filter_brand.rstrip(','))
           context={
            "object_list": products_qs,
            'colors': qs_color,
            'sizes':qs_size
            }
            # print(products_qs)
            # print(qs_color)
            # print(qs_size)

     return render(request,"product/products.html",context)

ajax.js:

$.ajax({
        url:'/cart/api/filterby/',
        method:'get',
        data:
            {
                'filter_brand':str,

            },
        success: function (data) {
            console.log(data)
            // location.reload()
        },
        error: function (error) {
            console.log(error)
        }

    })

После поиска в моем вопросе я обнаружил, что моя проблема в том, что я 'Я пытаюсь смешать сторону сервера со стороной клиента, и решение состоит в том, чтобы отправить мой HTML-шаблон с помощью функции HttpResponse not render, а затем с помощью javascript я выбираю HTML-страницу и изменяю содержимое с помощью нового html.

На самом деле, я не совсем понял проблему и почему смешивание сервера с клиентом вызвало эту проблему, и почему мой код не работал с первого раза, используя рендер, поэтому не могли бы вы объяснить более подробно или дать ссылки на меня, чтобы понять.

Кроме того, я знаком с Django celery и Redis, если я смогу использовать эти технологии в такой ситуации, не могли бы вы обратиться ко мне, как их использовать.

1 Ответ

0 голосов
/ 21 ноября 2018

Когда я работаю с Django и Ajax, мне нравится использовать JsonResponse, библиотеку из django.http.Таким образом, я могу передать ответ о состоянии (200, 500, ...) и данные, которые будут обработаны заранее.

Проблема в вашем случае заключается в том, что после получения ответа выперезагрузите страницу.

// location.reload()

Поскольку ваши ответные данные являются объектом, вы должны определить, используя javascript, где они будут размещены на экране, например:

success: function (data) {
        console.log(data);
        $("#div_object_list").html(data.object_list);
    },
...