Страница не загружается даже после статуса 200

Я пытаюсь перенаправить на страницу счета, но ничего не меняется, кроме обновления

это url.py

urlpatterns = [
    path('', User_login_view, name='login'),
    path('home/', HomePageView.as_view(), name='home'),
    path("nglm/", NGLMView.as_view() , name="nglm"),
     """ other urls for the sidebar"""
    path("createinvoice/", NGLINVAPI.as_view(), name="createinvoice"),
    path("nglinvoice/", NGLInvoiceTV.as_view(), name="nglinvoice")
    ]

После входа в систему я перехожу на страницу "nglm", где ввожу данные клиента и нажимаю кнопку submit, которая вызывает api "createinvoice". класс показан ниже

class NGLINVAPI(APIView):
def post(self,request):
    if 'nglinv' == request.POST['formtype'] :
        data = {
            'name': request.data['cname'],
            'civilid': request.data['civilid'],
            'ph':request.data['ph'],
            'disc':request.data['disc'],
            'bookno':request.data['Bookno'],
            'tga':request.data['LAmount'],
        }
        p,ccreated = update_customerdb(data=data)
        l = update_gldb(data=data)
        data['cid'] = p.id
        iq,i = update_inventory(data=data,gl=l)
        lici = update_LICI(cid=p,lid=l,data=data)
        ninv = update_invoice(licid=lici,lid=l,cid=p,data=data,il = iq,items = i)
        invid = ninv.id
        NGLItemModel.objects.all().delete()
        base_url = '/nglinvoice/'
        query_string =  urlencode({'pk': ninv.pk}) 
        url = '{}?{}'.format(base_url, query_string)
        return redirect(url)    
    return HttpResponseRedirect('home')

это должно было перенаправить меня на страницу счета-фактуры "nglinvoice". вид показан ниже

class NGLInvoiceTV(TemplateView):
template_name = "pages/nglinvoice.html"
def get(self, request):
    p = request.GET['pk']
    inv = get_object_or_404(InvoiceModel, pk=p)
    context = {}
    context['segment'] = 'api'
    context['pagename'] = 'New GL API'
    context['object'] = inv
    
    return render(request,self.template_name , context)

У меня нет проблем до этого момента. проблема в том, что он не показывает страницу "nglinvoice.html", он просто обновляет страницу "nglm"

ниже показано, что показывает терминал

Проверка системы не выявила проблем (0 промолчало).
15 мая, 2022 - 16:47:28
. Django версии 3.2.9, использование настроек 'mysite.settings'
Запуск сервера разработки по адресу http://127.0.0.1:8000/
. Выйдите из сервера с помощью CTRL-BREAK.
[15/May/2022 16:47:53] "GET / HTTP/1.1" 200 4103
[15/May/2022 16:47:55] "POST / HTTP/1.1" 302 0
[15/May/2022 16:47:55] "GET /home/ HTTP/1.1" 200 23840
[15/May/2022 16:47:58] "GET /nglm/ HTTP/1.1" 200 24028
[15/May/2022 16:47:58] "GET /itemlist/ HTTP/1.1" 200 2
[15/May/2022 16:48:02] "POST /additem/ HTTP/1.1" 302 0
[15/May/2022 16:48:02] "GET /nglm/ HTTP/1.1" 200 24028
[15/May/2022 16:48:02] "GET /itemlist/ HTTP/1.1" 200 2
[15/May/2022 16:48:23] "POST /additem/ HTTP/1.1" 200 8
[15/May/2022 16:48:23] "GET /itemlist/ HTTP/1.1" 200 104
[15/May/2022 16:48:34] "GET /apicheck/?term=p HTTP/1.1" 200 17
[15/May/2022 16:48:35] "GET /get_customerdetails/?k=PETER+JOHNSON&t=n HTTP/1.1" 200 102
. [15/May/2022 16:48:38] "POST /createinvoice/ HTTP/1.1" 302 0
[15/May/2022 16:48:38] "GET /nglinvoice/?pk=5 HTTP/1.1" 200 13863

если я ввожу последний url вручную, я вижу страницу

Побочная заметка, слишком длинная для комментария.

Диспетчеризация URL выполняется не по-Django, не по-REST. Почему /nglinvoice/?pk=5? Это приводит к лишнему "look around" коду, изобретающему встроенные функции django, доступные из коробки.

Вместо этого:

# urls
urlpatterns = [
    path("nglinvoice/", NGLInvoiceTV.as_view(), name="nglinvoice")
    ]

# view
base_url = '/nglinvoice/'
query_string =  urlencode({'pk': ninv.pk}) 
url = '{}?{}'.format(base_url, query_string)

попробуйте это:

# urls
urlpatterns = [
    path("nglinvoice/<int:pk>/", NGLInvoiceTV.as_view(), name="nglinvoice")
    ]

# view
url = reverse('nglinvoice', args=(ninv.pk, ))

вот пример из документации именно с redirect.

Вместо общего TemplateView попробуйте более конкретный и связанный с тем, что происходит в вашем коде DetailView. Он автоматически получит запрошенную запись.

Я написал об этом на форуме Django, и мне предложили заставить JavaScript перенаправлять вместо APIView, и это начало работать

https://forum.djangoproject.com/t/page-not-loading-even-after-200-status/13777/4

Так что я сделал несколько изменений

На мой взгляд:

class NGLINVAPI(APIView):
 def post(self,request):
    if 'nglinv' == request.POST['formtype'] :
        """Blah Blah Blah """
        url = url = reverse('nglinvoice', args=(ninv.pk, ))
        return JsonResponse({'url':url},safe=False)    
    return HttpResponseRedirect('home')

и в моем ajax успех

        success: function (response) {
        window.location.href = response.url          
    },
Вернуться на верх