Условное перенаправление на django?
У меня есть система списков пожеланий. С ее помощью пользователь может добавлять товары в список желаний, нажимая на иконку сердца, проблема в том, что у меня есть два места, где пользователь может удалить товары из списка желаний:
1. User can remove items on the wishlis from the search results
2. User can remove items on the wishlis from "Wishlist" menu
Поэтому, как сделать перенаправление на основе страницы, например,
1, Когда пользователь нажимает на иконку сердца в результатах поиска, он выполняет действие и перенаправляется на ту же страницу с результатами поиска
2.2, И когда пользователь нажимает на иконку сердца в меню списка желаний, он должен перенаправляться обратно в список желаний снова
Here is the code
def save_wish(request, pk):
if request.method == 'POST':
student = request.user.student
.........
.........
return redirect('students:search')
Итак, приведенный выше код всегда возвращает на страницу "search" независимо от того, на какую страницу перешел пользователь, как сделать условный редирект на "Search", когда пользователь переходит из поиска, и на "wishlist", когда пользователь переходит со страницы "wishlist"?
Вы можете использовать:
request.path # -без параметров GET request.get_full_path
Т.е. :
def save_wish(request, pk):
if request.method == 'POST':
student = request.user.student
.........
.........
if request.path == '/search':
return redirect('students:search')
elif:
return redirect('/whishilit-url')
Более элегантным подходом будет:
request.resolver_match.view_name
Т.е.:
def save_wish(request, pk):
route = request.resolver_match.view_name
if request.method == 'POST':
student = request.user.student
.........
.........
return redirect(route)
Два способа, которые я могу придумать для решения этой проблемы:
- Использование
request.META.HTTP_REFERER
from django.http import HttpResponseRedirect
def someview(request):
...
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
- Использование
path_info
from django.http import HttpResponseRedirect
def someview(request):
...
return HttpResponseRedirect(request.path_info)
Одним из способов сделать это является использование скрытого поля в вашей форме. При удалении элемента списка желаний из результатов поиска можно использовать скрытое поле внутри формы-
<input type="hidden" id="hidField" name="hidField" value="searchPage">
Тогда в представлениях -
def save_wish(request):
if request.method=="POST":
hidden_value=request.POST["hidField"]
---------------------------------
if hidden_value=="searchPage":
return redirect("students:search")
else:
return redirect("wishlist-page")