Как лучше всего вернуться на предыдущую страницу после 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)
Вернуться на верх