Estoy creando una aplicación web donde el usuario puede crear marcadores en un mapa de folleto. Los detalles del marcador se guardan en un backend con Django. Mi objetivo es redirigir al usuario a una página de detalles para completar los detalles del marcador después de hacer clic en el mapa. Aquí el código js para redirigir a la URL creada con una publicación de Ajax. Se ejecuta cuando el usuario hace clic en el mapa del folleto.
map.on("click", function (e) { window.location.href = {% url 'create' %}; $.ajax({ url: {% url 'create' %}, data: { markers: markers_dict}, type: "POST" }).done(function (response) { console.log(response); }); }pero estoy luchando en views.py porque esta redirección y la publicación AJAX crean dos solicitudes, una GET y otra POST:
def create_marker(request): if request.method == "POST": r = request.POST.get("markers") print(r) return JsonResponse({"response":"succeed"}) else: return JsonResponse({"response":"failed"})y el urls.py:
url_patterns = [ path("create/",views.create_marker,name="create"), ] Siempre devuelve la respuesta fallida incluso si imprime r en la consola. ¿Cómo puedo enviar estos datos de interfaz a la url de creación mientras redirijo a esta url y creo un django con estos datos?
Está saliendo de la página actual antes de realizar la llamada ajax. Mueva la redirección al bloque hecho de la llamada ajax. Algo como esto:
map.on("click", function (e) { $.ajax({ url: {% url 'create' %}, data: { markers: markers_dict}, type: "POST" }).done(function (response) { window.location.href = “{% url 'create' %}/” + response.id; }); }Necesitará una URL más en su urls.py para editar el objeto de marcador en el backend. Pruebe el CBV DetailView .
Entonces, primero publica en esta vista con los datos de su mapa. Una vez que tenga éxito, redirija al usuario a la vista de edición de los datos creados.