Foros del Web » Programando para Internet » Python »

Problema en Django con static files y floating comma

Estas en el tema de Problema en Django con static files y floating comma en el foro de Python en Foros del Web. Pues me he encontrado con dos problemas más El primero es que no puedo servir archivos estáticos en los templates, al final lo he conseguido ...
  #1 (permalink)  
Antiguo 09/11/2011, 09:33
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Problema en Django con static files y floating comma

Pues me he encontrado con dos problemas más El primero es que no puedo servir archivos estáticos en los templates, al final lo he conseguido pero he tenido que hard-codear la URL. En los templates de ejemplo usan esto:
Código:
<img src="{{ STATIC_URL }}/h1.jpg" />
Sin embargo esa variable está vacía en mi caso, puesto que no imprime nada. He usado como referencia esta página y esta, pero no soy capaz de hacerlo funcionar.
El otro problema es que estoy usando los stactic files para cargar archivos JS. Después tengo un tag script en la página y le paso los datos del servidor; hasta ahí bien, pero necesito traer unos números decimales de la BD, y cuando los imprime lo hace como "x, y", y no como "x.y", así que no me sirve; ¿cómo puedo cambiar este comportamiento?
Saludos y gracias de antemano (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 09/11/2011, 10:07
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Esto es en servidor de desarrollo o en el servidor de producción (apache)?
Si es el servidor de desarrollo entonces te recomiendo ver este link.

Si es en el servidor de producción entonces configura en servidor web para que sirva en contenido estático.

DECIMAL_SEPARATOR en los settings
  #3 (permalink)  
Antiguo 09/11/2011, 17:22
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

De momento estoy en development, pero si de paso aprendo cómo se hace en producción pues mejor
Lo de los static files no he podido mirarlo porque hoy he estado liado y no he tenido tiempo, mañana le echo un ojo y te digo ; respecto a los puntos, ya está solucionado. Tuve que quitar USE_L10N (ponerlo a False, vamos), y después formatear las fechas con DATE_FORMAT D:
Ahora, después de esto siguen apareciendo nuevos problemas Tengo un loop como este:
Código:
{% for foo in bar %}
	{{ foo }},
{% endfor %}
Sin embargo necesitaría algo como esto:

Código:
{% for foo, baz in bar, candy %}
	{{ foo }}, {{ baz }}
{% endfor %}
Que me da un error. Entonces se me ocurrió usar cycle, pero como es un array no me sirve, tampoco puedo usar *candy porque es el lenguaje de templates de Django, y por tanto tampoco enumerate. Entonces descubrí forloop.counter, pero tampoco sirve, porque al hacer algo como
Código:
{{ baz.forloop.counter0 }}
Que se supone que equivaldría a baz[forloop.counter0], no hace nada, printa un string vacío y listo. ¿Cómo puedo recorrer dos listas a la vez, con dos variables distintas?
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 09/11/2011, 17:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Suponiendo que bar es una lista
Código:
#views.py
bar = ['a', 'b', 'c']

#template.html
{% for foo in bar %}
	{{ foo }}
{% endfor %}
Entonces imprime
Código:
a
b
c
Si quieres imprimir algo diferente entonces haces esto:
Código:
#views.py
bar = [('a', 'x'), ('b', 'y'), ('c', 'z')]

#template.html
{% for foo, baz in bar %}
	{{ foo }}, {{ baz }}
{% endfor %}
Tu solo le tienes que enviar los datos al templeate de tal forma que el template solo se encargue de imprimirlos.
  #5 (permalink)  
Antiguo 10/11/2011, 12:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Cita:
Iniciado por razpeitia
Si quieres imprimir algo diferente entonces haces esto:
Código:
#views.py
bar = [('a', 'x'), ('b', 'y'), ('c', 'z')]

#template.html
{% for foo, baz in bar %}
	{{ foo }}, {{ baz }}
{% endfor %}
Sí, al final lo hice más o menos así (con zip), ahora voy a echarle un ojo a los static files
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #6 (permalink)  
Antiguo 10/11/2011, 17:12
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Ok, perfecto, ya pude con los static files! Sólo tuve que configurar correctamente STATIC_ROOT, STATIC_URL Y STATICFILES_DIRS; y hacer un collectfiles para almacenar los archivos en la STATIC_ROOT. Recomiendo este tema de stackoverflow, la mejor explicación que he encontrado sobre STATIC_ROOT y demás.
Sin embargo me encuentro otra vez con el problema de la codificación; al codificar los archivos con UTF-8 se acabaron los problemas en los templates, pero al usar el CMS que trae de admin me da un error DjangoUnicodeDecodeError porque hay una tilde, exactamente:
Cita:
Iniciado por Django
'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128). You passed in <Examen: [Bad Unicode data]> (<class 'califs.models.Examen'>)
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 10/11/2011, 17:21
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Si planeas caracteres no ascii en el código también debes de poner el encoding del archivo como utf-8 (de preferencia).

Esto lo tienes que hacer de 2 maneras.
1.- Diciendole a tu editor de texto que lo que escribas lo ponga como utf-8
2.- Al principio del archivo después del shebang, debe de ir declaro que codificación usas.
Ejemplo:
Código:
# -*- coding: utf-8 -*-
  #8 (permalink)  
Antiguo 11/11/2011, 00:40
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Eso ya lo tengo hecho, tanto los encodings de los archivos para los templates; como ahora los coding al inicio de los archivos, pero yo creo que el problema es algún setting de Django a algún error que le tira la BD
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 11/11/2011, 09:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Por cierto no pongas caracteres que no sean ascii en el código es molesto a la hora de hacer un cambio.
  #10 (permalink)  
Antiguo 12/11/2011, 13:59
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Nada, me he recorrido Google de arriba a abajo y no he conseguido que funcione
En una cadena de enlaces llegué aquí e hice lo que decía, cambié el my.conf (en mi caso my.ini) y modifiqué el charset de la BD mediante la consola mysql y el de la tabla, pero me sigue dando el mismo error:
Cita:
Iniciado por Django
'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128). You passed in <Examen: [Bad Unicode data]> (<class 'califs.models.Examen'>)
¿Qué más puede estar causando el error?
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #11 (permalink)  
Antiguo 12/11/2011, 15:24
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Pon el error completo por favor.

Estoy casi seguro que es por que tienes caracteres no utf-8 en el código.

Tambien postea el modelo califs.models.Examen
  #12 (permalink)  
Antiguo 12/11/2011, 16:16
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

El error es exactamente este:
Cita:
Iniciado por Django
DjangoUnicodeDecodeError at /admin/califs/examen/add/
'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128). You passed in <Examen: [Bad Unicode data]> (<class 'califs.models.Examen'>)
Request Method: POST
Request URL: http://localhost:8000/admin/califs/examen/add/
Django Version: 1.3.1
Exception Type: DjangoUnicodeDecodeError
Exception Value:
'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128). You passed in <Examen: [Bad Unicode data]> (<class 'califs.models.Examen'>)
Exception Location: C:\Python27\lib\site-packages\django\utils\encoding.py in force_unicode, line 93
Python Executable: C:\Python27\python.exe
Python Version: 2.7.2
Python Path:
['D:\\notas',
'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg',
'C:\\Windows\\system32\\python27.zip',
'C:\\Python27\\DLLs',
'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27',
'C:\\Python27\\lib\\site-packages']
Server time: sáb, 12 Nov 2011 23:10:16 +0100
Unicode error hint

The string that could not be encoded/decoded was: Ingl��s :
Y models.py es:
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3.  
  4. class Asignatura(models.Model):
  5.     nombre = models.CharField(max_length = 20)
  6.     def __unicode__(self):
  7.         return self.nombre
  8.    
  9.  
  10.  
  11. class Examen(models.Model):
  12.     asignatura = models.ForeignKey(Asignatura)
  13.     nota = models.FloatField()
  14.     evaluacion = models.IntegerField()
  15.     fecha = models.DateField('fecha examen')
  16.     def __unicode__(self):
  17.         return str(self.asignatura) + ' : ' + str(self.nota)
Creo que no hay ningún carácter no UTF-8 en mi código, pero de todas maneras con el encoding en el propio archivo y el de Notepad++ debería bastar, ¿no?
Saludos, espero que sirva (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #13 (permalink)  
Antiguo 12/11/2011, 16:20
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Código Python:
Ver original
  1. def __unicode__(self):
  2.         return unicode(str(self.asignatura) + ' : ' + str(self.nota))

Recuerda que __unicode__ regresa una cadena unicode y no una cadena a secas.

Lo mismo para asignatura

Código Python:
Ver original
  1. def __unicode__(self):
  2.         return unicode(self.nombre)
  #14 (permalink)  
Antiguo 12/11/2011, 16:48
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Cita:
Iniciado por razpeitia
Recuerda que __unicode__ regresa una cadena unicode y no una cadena a secas.
No entiendo qué quieres decir con esto ¿No se supone que si es unicode es que ya está en UTF-8?
Ah, y usé __unicode__ en vez de __str__ porque Django lo recomendaba.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #15 (permalink)  
Antiguo 13/11/2011, 10:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

Cita:
Iniciado por _cronos2 Ver Mensaje
No entiendo qué quieres decir con esto ¿No se supone que si es unicode es que ya está en UTF-8?
No, te recomiendo leer este articulo sobre encodings y python.
  #16 (permalink)  
Antiguo 13/11/2011, 14:31
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Oh, ahora lo entendí, entonces el problema es que Django espera que ese string ya sea Unicode, y por tanto tengo que encargarme de convertirlo, ¿no?
Pues la verdad es que tampoco así he conseguido solucionar nada. Probé a usar la solución del link:
Cita:
s = 'Inglés'
u = unicode(s, 'utf-8')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
u = unicode(s, 'utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 4: unexpected end of data
Sin embargo si lo hago con UTF-16 sí funciona También probé en trypython.org, y sí funciona con UTF-8, así que ahora estoy más perdido que antes De todas maneras intenté hacer esto:
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3.  
  4. class Asignatura(models.Model):
  5.     nombre = models.CharField(max_length = 20)
  6.     def __unicode__(self):
  7.         return unicode(self.nombre, 'utf-8')
  8.    
  9.  
  10.  
  11. class Examen(models.Model):
  12.     asignatura = models.ForeignKey(Asignatura)
  13.     nota = models.FloatField()
  14.     evaluacion = models.IntegerField()
  15.     fecha = models.DateField('fecha examen')
  16.     def __unicode__(self):
  17.         return unicode(str(self.asignatura) + ' : ' + str(self.nota), 'utf-8')
Y ahora en vez de salirme el DjangoUnicodeDecodeError me sale:
Cita:
Iniciado por Django
TypeError at /admin/califs/examen/add/
decoding Unicode is not supported

Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #17 (permalink)  
Antiguo 14/11/2011, 17:27
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Wow, después de una semana peleándome con ello lo conseguí! Bueno, más o menos, pero mejor que nada Resulta que el problema (debía de) venía de esta línea:
Código Python:
Ver original
  1. return unicode(self.nombre, 'utf-8')
Al cambiarla:
Código Python:
Ver original
  1. return unicode(self.nombre)
Ya funciona (casi todo) sobre ruedas El único problema es que ahora en el template en vez de imprimir p. ej. 'Inglés' imprime 'Ingl\xc3\xa9s', y después JS imprime "Inglés" Probé a usar encode('latin-1') en la vista pero claro, Django me da el error del template ¿Será que Django me odia? XD
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #18 (permalink)  
Antiguo 14/11/2011, 22:11
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema en Django con static files y floating comma

A mi me funciona perfectamente todo:

Código Python:
Ver original
  1. #models.py
  2. #coding: utf-8
  3. from django.db import models
  4.  
  5. class Persona(models.Model):
  6.     nombre = models.CharField(max_length=50)
  7.    
  8.     def __unicode__(self):
  9.         return unicode(self.nombre)

Código HTML:
Ver original
  1. #template: personas.html
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4.         <title>Titulo</title>
  5.     </head>
  6.     <body>
  7.         <ul>
  8.         {% for persona in personas %}
  9.             <li>{{ persona }}</li>
  10.         {% endfor %}
  11.         </ul>
  12.     </body>
  13. </html>

Código Python:
Ver original
  1. #views.py
  2. from django.shortcuts import render_to_response
  3. from models import Persona
  4.  
  5. def personas(request):
  6.     data = {}
  7.     data['personas'] = list(Persona.objects.all())
  8.     return render_to_response('personas.html', data)
  #19 (permalink)  
Antiguo 15/11/2011, 17:33
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema en Django con static files y floating comma

Cada vez más creo que el problema debe de ser algo en mi propio Python De todas formas al final conseguí arreglarlo así:
Código Python:
Ver original
  1. asignaturas = dict( zip(deltas, [str(e.asignatura).decode('utf-8').encode(default_locale) for e in examenes]) )
Después de convertirlo a string lo paso a utf-8, y después lo vuelvo a convertir a bytestring con el charset de mi PC, que lo obtengo así:
Código Python:
Ver original
  1. import locale
  2.  
  3. default_locale = locale.getdefaultlocale()[1]
Que en este caso es cp1252, no sé por qué Muchas gracias por todo, creo que ya se han acabado los problemas en el server-side
Saludos y gracias de nuevo :)
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: django, files, floating, static
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 16:39.