Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

738
Vistas
Cómo pasar una variable proveniente de HTML a otra función de vista de Django

Introducción: He estado buscando todas las preguntas de stackoverflow pero, lamentablemente, después de horas de investigación, no puedo encontrar una solución que se adapte a mis necesidades. Tengo una variable generada después de que el usuario envía un formulario. Obtengo esta variable usando una llamada Ajax y luego la paso a una vista Django.


archivo.html

 // if user clicked submit button, call ajax to pass variable to django view $('#submit').click(function() { var dato = 0; $.ajax({ url: '{% url 'todo:get_dato' %}', dataType: 'text', method: "POST", data: { csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(), data: JSON.stringify(dato), }, success: function(data, status, xhr) {}, error: function(xhr, status, error){} }) });

Problema: puedo "recibir" esta variable en una función de vista de django pero no puedo pasar la variable ajax_date a otra función de vista dentro del mismo archivo views.py


vistas.py

Primera función donde obtengo la variable ajax proveniente de HTML

 @login_required @user_passes_test(staff_check) def get_dato(request): if request.method == 'POST' and 'data' in request.POST: ajax_response_dict = json.loads(request.POST['data']) ajax_date = ajax_response_dict.get('date_id') request.session['ajax_date'] = ajax_date

2da función donde necesito usar la variable ajax_date

 @login_required @user_passes_test(staff_check) def calendario(request): form = EventForm(request.POST) if form.is_valid(): form.save() #HERE I NEED TO USE VARIABLE ajax_date = request.session.get('ajax_date')

Situación real: ¿Qué tipo de objeto de return debo usar en la función get_dato()?

Si ajax_date desde la segunda función, obtuve:

 None <class 'NoneType'>

mientras que dentro de la primera función todo funciona:

ajax_response_dict es:

 {'date_id': 0} <class 'dict'>

ajax_date es:

 0 <class 'int'>

¿Cómo puedo solucionar este problema?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una solución es separar los métodos que generan una plantilla de aquellos que realizan algún tipo de lógica de back-end, por ejemplo:

vistas.py

 def render_index(request): ''' this method serves the index.html page only ''' return render(request, 'index.html') def submit_form(request): ''' this method unpacks a post request and does something with it ''' # unpack request: date = request.POST.get('date') # do something with date ... # create the response: response = {'message':'OK'} return JsonResponse(response)

índice.html

 <button id='btn'>Click Me!</button> <script src="{% static 'scripts.js' %}"></script>

scripts.js

 $('#btn').click(function() { /* this method sends a post request to the backend */ $.ajax({ url : 'submit_form', type : 'POST', data : { date : new Date(), ... }, success : function(response) { /* this method executes on a successful response from the backend */ var message = response.message // do something with the message, route user to new page, close form ... } }); });
over 4 years ago · Santiago Trujillo Denunciar

0

Gracias a @Daniel encontré el error principal en la llamada Ajax. El problema era la línea var id_data = {date_id: 0}; La variable js estaba vacía en el punto de partida.

PERO cometí otro error, porque estaba tratando de print(dato) después de la línea if form.is_valid(): es por eso que no puedo obtener el valor dentro de la vista existente y traté de hacerlo funcionar usando otra vista que es realmente inútil para mi objetivo

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda