render_to_response объединяет URL-адрес с текущим URL

#python #django

#python #django

Вопрос:

У меня есть возможность удалить запись при нажатии на привязку на индексной странице.Я хочу перенаправить на текущую страницу после запуска этого view.in urls.py:

 (r'^airAgency/(?P<key>[a-zA-Z0-9] )/tour/delete/(?P<tour_id>d )/$','airAgency.views.deletetour'),
(r'^airAgency/(?P<key>[a-zA-Z0-9] )/$','airAgency.views.index'),
  

в views.py:

 def deletetour(request,key,tour_id):
   tour=Tour.objects.get(pk=tour_id)
   tour.delete()
   top5news=News.objects.filter(User__agentposition__AgentCode__id=agn.id).order_by('-ActionDate')[:5]
   return render_to_response('airAgency/index.html/',{'top5news':top5news},context_instance=RequestContext(request))
  

представьте, что теперь браузер находится по этому адресу:

 http://127.0.0.1:8080/airAgency/mastane
  

когда я нажимаю на привязку, которая перенаправляет меня на удаление нашего просмотра, после удаления записанного браузер находит этот URL:

 http://127.0.0.1:8080/airAgency/mastane/tour/delete/4/airAgency/index.html/
  

но я хочу снова перенаправить на первый URL:

 http://127.0.0.1:8080/airAgency/mastane
  

Обратите внимание, что мне тоже нужен объект RequestContext.Я имею в виду, что HttpResponseRedirect не подходит для меня.

tnx заранее

Комментарии:

1. Почему HttpResponseRedirect не подходит для вашего? Вы говорите, что вам нужно перенаправить, для этого используется HttpResponseRedirect .

2. потому что мне тоже нужен context_instance=RequestContext (запрос). Я не могу передать этот объект при использовании HttpResponseRedirect.

Ответ №1:

Если вы решите использовать HttpResponseRedirect , попробуйте это:

 return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
  

Ответ №2:

Как только вы находитесь в обработчике для другого URL-адреса, вы не можете изменить URL-адрес без перенаправления. Если вам нужно сохранить состояние исходного URL-адреса, когда вы вернетесь к нему, закодируйте его в get-параметры URL-адреса, на который вы перенаправляете обратно.

Кроме того, не уверен, что вы уже делаете это, но удаление записи действительно должно обрабатываться в POST, а не в get .

Надеюсь, это поможет!

Комментарии:

1. Вы имеете в виду, что я должен обработать это в индексном представлении? как я могу это сделать? каков правильный способ?

2. Обратите внимание, что мне нужно отправить некоторые объекты, такие как ‘top5news’, при перенаправлении на текущую страницу.

3. если вам нужен context_instance, предположительно, существует некоторый конечный набор переменных, из context_instance, которые вам нужно отобразить airAgency/index.html правильно после удаления, верно? Вы не можете включать произвольные переменные python в перенаправление, но вы можете индивидуально кодировать переменные с URL-адресом, например, возвращать HttpResponseRedirect(«/path?» urllib.urlencode({‘deletedname’: ‘thename’}))

Ответ №3:

Если вам нужен объект RequestContext только для отображения некоторого сообщения об успешном удалении, вы можете использовать фреймворк django.contrib.messages.