Перенаправление пользователя на предыдущую страницу после отправки формы в Django
Я пытаюсь перенаправить пользователя на предыдущую страницу после отправки формы.
Для наглядности вот как будет выглядеть процесс
- Пользователь переходит на страницу Venue_id и нажимает на id продукта
- Пользователь попадает на страницу Product_id и находит форму
- Пользователь заполняет форму и отправляет ее на странице Product_id
- пользователь перенаправляется на страницу Venue_id после отправки формы
Я нашел хороший источник вдохновения на форуме, в частности на этой странице (How to redirect to previous page in Django after POST request)
(Я также нашел несколько постов, используя историю браузера. Но решил придерживаться этого метода, так как, похоже, использование истории браузера не всегда работает)
Я использовал next
, как предложено в коде в сообщении выше. Но есть кое-что, чего я не понимаю, и, возможно, поэтому у меня получается неправильно.
Вот различные коды в представлениях, которые я пробовал для next
:
next = request.POST.get('next','/')
=> это отсылает меня к '/', что это не то, что я хочу. Однако это, похоже, сработало для человека, который разместившего исходный вопрос, хотя он пытался НЕ перенаправляться на '/';next = request.POST.get('next','')
=> отправляет меня на url страницы product_id, но страница пуста- next = request.POST.get('next') => этот вариант был предложен в других сообщениях, но я получаю
Field 'id' expected a number but got 'None'
.
Я могу быть совершенно не прав, но мне кажется, что ключ, скорее всего, там.
С точки зрения кода
Виды
def show_product_from_venue(request, product_id):
product = Product.objects.get(pk=product_id)
form = ReviewForm()
venue_form = VenueForm()
submitted = False
next = request.POST.get('next')
if request.method == "POST" and 'btnvenue_form' in request.POST:
venue_form = VenueForm(request.POST)
if venue_form.is_valid():
venue_form.save()
return HttpResponseRedirect(next)
else:
venue_form = VenueForm
if 'submitted' in request.GET:
submitted = True
else:
print(form.errors)
return render(request,"main/show_product_from_venue.html", {'form':form, 'submitted':submitted, 'product':product, 'venue_form':venue_form, 'data':data})
Venue_id (шаблон)
<a href="{% url 'show-product-from-venue' product.id %}?next={{ request.path|urlencode }} method="POST">
Product_id (шаблон с формой)
<form action="{% url 'show-product-from-venue' product.id%}" method="POST">
{% csrf_token %}
{{ form}}
<input type="submit" name="btnreview_form" name="next" value="{{ request.GET.next }}" class="btn btn-primary custom-btn">
</form>
Если вы хотите перейти на предыдущие страницы, то просто добавьте корень, куда именно вы хотите перейти:
В просмотрах:
EX:
return HttpResponseRedirect("/users/")