Перенаправление после отправки не работает после добавления дополнительного кода сверху. Возможно, проблема приоритета

У меня есть скрипт, который перенаправляет пользователя на предыдущий page_id после submit:

  1. Пользователь подключается к странице page_A
  2. Нажмет на продукт_1,
  3. Будет перенаправлен на страницу продукта_1,
  4. Оставляет отзыв и после нажатия submit перенаправляется на страницу_id

Это работает нормально в течение некоторого времени.

Я решил реализовать djang-hitcount в представлении на основе функции (использовал код здесь как использовать Django Hitcount в представлении на основе функции, а не класса? ), так как я хотел увидеть, сколько уникальных IP-адресов подключилось.

С тех пор код отправки комментария больше не работает.

В качестве примера:

  1. Если пользователь переходит на страницу Page_A, URL будет выглядеть следующим образом: http://localhost:8000/Page/A
  2. При клике на товар_1, URL будет отображать следующее:http://localhost:8000/product/1?next=/Page/A
  3. При отправке отзыва пользователь будет перенаправлен на : http://localhost:8000/Page/1

Однако теперь пользователь перенаправляется на http://localhost:8000/Page/1, которого, очевидно, не существует - это должна быть страница A, но вместо этого приписывает product_id к page_id.

Я подозреваю, что это происходит потому, что код django-hitcount взял на себя часть начальной логики и перепутал идентификаторы страницы и продукта.

(views.py довольно длинный, но я чувствую, что это важно для понимания логики всей функции)

Вот так:

Views.py

    def show_event(request, event_id):    
        submitted = False
        form = 'ReviewForm'
        formonpage = 'ReviewForm'

        ###<-- django_hitcount starts here

        object = get_object_or_404(Event, pk=event_id)
        context={}
        print(object)
        
        #hit count logic
        hit_count=get_hitcount_model().objects.get_for_object(object)
        print(hit_count)
        hits = hit_count.hits
        print(hits)
        
        hitcontext = hitcount = {'pk':hit_count.pk}
        print(hitcount)
        
        hit_count_response = HitCountMixin.hit_count(request, hit_count)
        print(hit_count_response)
        
        if hit_count_response.hit_counted:
            hits = hits + 1
            hitcontext['hit_counted'] = hit_count_response.hit_counted
            hitcontext['hit_message'] = hit_count_response.hit_message
            hitcontext['total_hits'] = hits
            print()
 ###<-- django_hitcount finishes here
        
        
        #redirect to show event ID page, if user decides to leave comment on product page
        if request.method =="POST" and 'btnreview_form' in request.POST:
            form = CatalogueReviewForm(request.POST)
            data = form.save(commit=False)
            data.product_id = event_id
            data.catalogue_id = event_id
            data.user_id = request.user.id
            data.save()
            ev_id = request.POST.get('event_id')
            if form.is_valid():
                form.save()
                return HttpResponseRedirect(ev_id)
        
        #Leaves user on page
        if request.method =="POST":
            formonpage = ReviewForm(request.POST)
            if formonpage.is_valid():
                data = formonpage.save(commit=False)
                data.product_id = product_id
                data.user_id = request.user.id
                data.save()
    
            else :
                print(formonpage.errors)
        else:
            formonpage = ReviewForm()
        
        # data displayed on page 
        event = Event.objects.get(pk=event_id)
        menu = Catalogue.objects.filter(event=event_id)
        categories = Catalogue.objects.filter(event=event_id)
        return render(request, 'main/show_event.html',{'event':event, 'categories':categories,'menu':menu,'form':form,'formonpage':formonpage,'submitted':submitted})

    def show_product_from_event(request, catalogue_id):
        product = Catalogue.objects.get(pk=catalogue_id)
        form = CatalogueReviewForm()
        event_form = EventForm()
        submitted = False
        data = Catalogue.objects.filter(pk=catalogue_id).annotate(
                avg_rating =Avg('catalogue_comments__rating'))
        
        return render(request,"main/show_product_from_event.html", {'form':form, 'submitted':submitted, 'product':product, 'event_form':event_form, 'data':data})

template.py

{% block content %}
    <body>
                    <form action="{% url 'show-event' product.id %}" method="POST">
                        {% csrf_token %}
                        <fieldset>
                            <input type="hidden" name="event_id" id="event_id" value="{{ request.GET.next }}">
                            <div class="form-group">
                            {{ form }}

                            <div class="col-md-12 text-center ">
                                <button class="button1 btn-block mybtn tx-tfm center"  name="btnreview_form" id="ev" type="submit" >Submit</button>
                    </form>

 <script> #<-- redirection script
    ev = (('{{ request.GET.next }}').split('/'))[2].split(' ');
    document.getElementById("event_id").value = ev[0];
</script>
    
{% endblock %}
Вернуться на верх