Как лучше всего вернуться на предыдущую страницу после Post? (Не логин)
После того, как пользователь обновляет запись и нажимает кнопку "Post", какой лучший способ перенаправить его на предыдущую страницу? Я знаю, что существует потенциальная проблема с использованием метода HTTP_REFERER, однако пользователь не будет использовать браузер с пользовательскими настройками
Это не работает (только обновляет страницу)
def form_valid(self, form):
form.instance.fk_user = self.request.user
form.save()
return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
def test_func(self):
post = self.get_object()
if self.request.user == post.fk_user:
return True
return False
Если я удаляю 'self.', то получаю ошибку "имя 'request' не определено"
Я обычно использую следующее, где я отправляю url перенаправления как часть POST запроса от страницы, которая его вызвала. Я сохраняю это в 'next':
from django.shortcuts import redirect
...
next_url = request.POST.get('next') if 'next' in request.POST else 'profile'
return redirect(next_url)
Хорошее объяснение потенциальной имплантации можно найти здесь: Как перенаправить на предыдущую страницу в Django после POST запроса. Но вы можете добавлять 'next' к вашему POST-запросу как угодно.
Вот пример того, как я бы реализовал это в представлении:
class TestView(View):
template_name = "sample/template.html"
def get(self, request):
next_url = request.GET.get('next')
form = TestForm()
...
return render(request, template_name=self.template_name, context={'form': form, "next": next_url})
return redirect(next_url)
def post(self, request):
form = TestForm(request.POST)
next_url = request.POST.get('next')
...
return redirect(next_url)