Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Jquery Ajax y django view

Estas en el tema de Jquery Ajax y django view en el foro de Python en Foros del Web. Hola como andan, tengo una consulta que no logro resolver, en el html tengo varios checkbox con los meses del año, al filtrar noticias por ...
  #1 (permalink)  
Antiguo 16/05/2013, 11:36
 
Fecha de Ingreso: enero-2013
Ubicación: Montevideo
Mensajes: 28
Antigüedad: 11 años, 2 meses
Puntos: 1
Jquery Ajax y django view

Hola como andan, tengo una consulta que no logro resolver,
en el html tengo varios checkbox con los meses del año, al filtrar noticias por dichos meses mando esta solicitud de ajax:
Código Javascript:
Ver original
  1. var toData = {
  2.             'anio' : anio,
  3.             'meses' : meses,
  4.             'tags' : tags
  5.         };
  6.        
  7.         $.ajax({
  8.                 type: "GET",
  9.                 url: "/app/filtrar-noticias",
  10.                 data: toData,              
  11.         }).done(function( msg ) {
  12.                 $("#noticias-lista").html(msg);
  13.         });
El tema está en que no logro obtener los datos en la vista de django, estoy haciendo esto:
Código Python:
Ver original
  1. @csrf_exempt
  2. def filtrarNoticias(request):
  3.     copia = {}      
  4.     anio =  request.GET.get("anio")    
  5.     meses =  request.GET.getlist("meses","")
  6.     tags = request.GET.getlist("tags","")      
  7.    
  8.     print request.GET
  9.     #me devuelve esto el print
  10. <QueryDict: {u'anio': [u'2009'], u'meses[]': [u'0', u'2', u'4']}>
  11.  
  12.     print  request.GET.get("meses[]")
  13.     #me devuelve el ultimo mes de la lista osea: 4


No se como descomponer la lista de meses, alguna sugerencia?

gracias
  #2 (permalink)  
Antiguo 16/05/2013, 12:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Jquery Ajax y django view

¿Checaste el contenido de meses?

Código Python:
Ver original
  1. @csrf_exempt
  2. def filtrarNoticias(request):
  3.     copia = {}      
  4.     anio =  request.GET.get("anio")    
  5.     meses =  request.GET.getlist("meses","")
  6.     tags = request.GET.getlist("tags","")      
  7.    
  8.     print request.GET
  9.     #me devuelve esto el print
  10. <QueryDict: {u'anio': [u'2009'], u'meses[]': [u'0', u'2', u'4']}>
  11.  
  12.     print  meses

Otra cosa no entiendo a que te refieres con "descomponer la lista de meses".
  #3 (permalink)  
Antiguo 16/05/2013, 14:13
 
Fecha de Ingreso: enero-2013
Ubicación: Montevideo
Mensajes: 28
Antigüedad: 11 años, 2 meses
Puntos: 1
Mensaje Respuesta: Jquery Ajax y django view

Si, meses viene cargado , hago lo siguiente me imprime el ultimo elemento de la lista.

Código Python:
Ver original
  1. print  request.GET.get("meses[]")
  2.     #me devuelve el ultimo mes de la lista osea: 4

Quisiera obtener todos los valores por separado para luego pasarle parametros a la busqueda de noticias por meses por ej:

Código Python:
Ver original
  1. Noticia.objects.filter(mes=[lista_meses])
  #4 (permalink)  
Antiguo 17/05/2013, 00:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Jquery Ajax y django view

Veo que tienes muchos errores de diseño en tu app, pero los ignorare.

Puedes hacer algo como:
Código Python:
Ver original
  1. @csrf_exempt
  2. def filtrarNoticias(request):
  3.     copia = {}      
  4.     anio =  request.GET.get("anio")    
  5.     meses =  request.GET.getlist("meses","")
  6.     tags = request.GET.getlist("tags","")
  7.  
  8.     print  Noticia.objects.filter(mes__in=meses)
  #5 (permalink)  
Antiguo 27/05/2013, 12:44
 
Fecha de Ingreso: enero-2013
Ubicación: Montevideo
Mensajes: 28
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Jquery Ajax y django view

Gracias por tu respuesta, al final ya lo solucioné de la siguiente manera, en el html paso los parametros como una cadena de texto separando los valores por un string, ejemplo el @ y luego en la vista de django hago split para dejarlos en un array..

Código Python:
Ver original
  1. @csrf_exempt
  2. def filtrarNoticias(request):
  3.     copia = {}      
  4.     anio =  request.GET.get("anio")    
  5.     meses =  request.GET.get("meses")
  6.     tags = request.GET.get("tags")      
  7.      
  8.     mess =  meses.split("@")
  9.     tagss = tags.split("@")
  10.    
  11.     meses = []    
  12.     for m in mess:
  13.         meses.append(int(m))
  14.    
  15.     tags = []
  16.     for t in tagss:
  17.         tags.append(str(t))    
  18.        
  19.     nots = Noticia.objects.all()
  20.  
  21.     if ( anio != "" or anio != None ) and (anio != "0"):    
  22.         nots = Noticia.objects.filter( fecha__year = anio )  
  23.    
  24.    
  25.     entries = []
  26.     if ( len(meses) > 0 and meses[0] != "" and meses[0] != " " and meses[0] != None ):        
  27.         for f in nots:                      
  28.             if f.fecha.month in meses:                                
  29.                 entries.append(f)
  30.         nots = entries
  31.    
  32.     if ( len(tags) > 0 and tags[0] != "" and tags[0] != " " and tags[0] != None ):            
  33.         noticias  = []      
  34.         for n in nots:
  35.             for tag in n.tags.all():                
  36.                 if str(tag) in tags:                    
  37.                     noticias.append(n)            
  38.         nots = noticias      
  39.    
  40.     arr = []
  41.     for n in nots:        
  42.         fileName, fileExtension = os.path.splitext(str(n.img_noticia))
  43.         arch1 = fileName.replace("\\","/")+".190x135"+fileExtension
  44.         aux = {'titulo':str(n.titulo), 'img':str(arch1), 'copete': str(n.contenido[:100])}        
  45.         arr.append(aux)

Etiquetas: ajax, django, jquery, view
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:28.