Actualmente estoy usando la siguiente función para obtener una vista de referencia:
def get_referer_view(request, default=None):
referer = request.META.get('HTTP_REFERER')
if not referer:
return default
# remove the protocol and split the url at the slashes
referer = re.sub('^https?:\/\/', '', referer).split('/')
if referer[0] != request.META.get('SERVER_NAME'):
return default
# add the slash at the relative path's view and finished
referer = u'/' + u'/'.join(referer[1:])
return referer
Si redirigí el view
como resultado de la lógica programática, por ejemplo ...
return HttpResponseRedirect('dashboard')
... ¿hay alguna manera de obtener la vista de referencia sin usar HTTP_REFERER
para poder usar esa variable en el redireccionado view
? Esto no siempre se establece en los encabezados del navegador.
Tenga en cuenta que debido a que las vistas se redirigen programáticamente, no puedo usar POST para recopilar los datos.
¿Quizás es posible establecer y recuperar un encabezado personalizado de alguna manera?
HttpResponseRedirect
no es realmente programático: devuelve la respuesta http 302 real y obliga al navegador a hacer una nueva solicitud a la nueva URL de la vista a la que se está redirigiendo ...
?came_from=inbox
. Linked, Facebook, otros parecen hacerlo, por lo que debería ser una buena práctica.