#python #django
#python #django
Вопрос:
У меня есть следующий пользовательский DeleteView
:
class CarDeleteView(LoginRequiredMixin, DeleteView):
model = Car
context_object_name = 'car'
template_name = 'cars/car_confirm_delete.html'
success_message = "%(name)s is pending removal"
def get_success_url(self):
return reverse('car-list')
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
name = self.object.name
owner = self.object.owner
if owner != self.request.user:
messages.error(request, f'You don't have permissions to remove {name}')
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
# DO Stuff
return redirect(reverse('car-list'))
Я пытаюсь перенаправить на предыдущую точку входа, когда пользователь не является владельцем (поэтому он не может удалить). Но HttpResponseRedirect(request.META.get('HTTP_REFERER'))
дает мне URL текущей страницы ( car_confirm_delete.html
), а не предыдущей. Как я могу заставить его перейти на предыдущую? Может быть, это потому, что Django публикует?
Комментарии:
1. Возможно, вы могли бы включить в свою форму какой-нибудь скрытый ввод, который содержал бы «следующий» адрес (как и форма входа), а когда этот отсутствует, просто перенаправьте их на эту страницу. HTTP_REFERER должен afaik возвращать URI, где была форма. (обычно это представление формы подтверждения удаления). Так что
HTTP_REFERER_REFERER
в вашем случае это было бы a, если вы хотите перейти на предыдущую страницу (до того, как пользователь перешел к форме) Я думаю, это действительно зависит от того, чего вы пытаетесь достичь.
Ответ №1:
Вам нужно импортировать HttpResponseRedirect
из django.http импорт HttpResponseRedirect
а затем
вернуть HttpResponseRedirect(request.META.get(‘HTTP_REFERER’))
Комментарии:
1. Это не так. Я импортирую его. В противном случае я бы получил сообщение об ошибке, а не URL текущей страницы.