Перенаправление после отправки не работает после добавления дополнительного кода сверху. Возможно, проблема приоритета
У меня есть скрипт, который перенаправляет пользователя на предыдущий page_id после submit:
- Пользователь подключается к странице page_A
- Нажмет на продукт_1,
- Будет перенаправлен на страницу продукта_1,
- Оставляет отзыв и после нажатия
submit
перенаправляется на страницу_id
Это работает нормально в течение некоторого времени.
Я решил реализовать djang-hitcount в представлении на основе функции (использовал код здесь как использовать Django Hitcount в представлении на основе функции, а не класса? ), так как я хотел увидеть, сколько уникальных IP-адресов подключилось.
С тех пор код отправки комментария больше не работает.
В качестве примера:
- Если пользователь переходит на страницу Page_A, URL будет выглядеть следующим образом:
http://localhost:8000/Page/A
- При клике на товар_1, URL будет отображать следующее:
http://localhost:8000/product/1?next=/Page/A
- При отправке отзыва пользователь будет перенаправлен на :
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 %}