working with template not name httpresponseredirect context code django redirect

with - Cómo redirigir a la página anterior en Django después de la solicitud POST



reverse django (2)

Me enfrento a un problema para el que no puedo encontrar una solución. Tengo un botón en la barra de navegación que está disponible en todas las páginas y es un botón responsable de crear contenido.

Ver que enlaza con el botón:

def createadv(request): uw = getuw(request.user.username) if request.method ==''POST'': form = AdverForm(request.POST, request.FILES) if form.is_valid(): form.instance.user = request.user form.save() return HttpResponseRedirect(''/'', {''username'': request.user.username, ''uw'': uw}) args = {} args.update(csrf(request)) args[''username''] = request.user.username args[''form''] = AdverForm() args[''uw''] = uw return render_to_response(''createadv.html'', args)

Si puede ver ahora, siempre redirijo a la página principal ''/'' después de crear contenido, pero quiero volver a la página con la que inicié la creación de contenido.


Puede agregar un campo next a su formulario y establecerlo en request.path . Después de procesar su formulario, puede redirigir al valor de esta ruta.

template.html

<form method="POST"> {% csrf_token %} {{ form }} <input type="hidden" name="next" value="{{ request.path }}"> <button type="submit">Let''s Go</button> </form>

vistas.py

next = request.POST.get(''next'', ''/'') return HttpResponseRedirect(next)

Esto es más o menos lo que hace django.contrib.auth para el formulario de inicio de sesión si recuerdo bien.

Si pasa a través de una página intermedia, puede pasar el valor ''siguiente'' a través de la cadena de consulta:

some_page.html

<a href="{% url ''your_form_view'' %}?next={{ request.path|urlencode }}">Go to my form!</a>

template.html

<form method="POST"> {% csrf_token %} {{ form }} <input type="hidden" name="next" value="{{ request.GET.next }}"> <button type="submit">Let''s Go</button> </form>


Puedes usar el valor HTTP_REFERER :

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

Tenga en cuenta que esto no funcionará si el cliente deshabilitó el envío de información de remitentes (por ejemplo, mediante una ventana de navegador privada / de incógnito). En tal caso, se redireccionará a / .