[Python-es] [CONSULTA]static files

Ricardo Azpeitia Pimentel razpeitia en gmail.com
Lun Sep 1 04:00:14 CEST 2014


Veo un montón de detalles en tu settings, cables hardcodeadas por varios
lados, es un error que todo el mundo comete. Incluso cuando inicie lo
cometí. Pero no es ningún pecado cometer este tipo de errores pero no
tratarlo de corregirlo si lo es o debería de serlo xD.

Volviendo al tema de los archivos estáticos no deberían de ser un tema
complejo. Te voy a explicar rápidamente como funcionan los archivos
estáticos. Que no son temas de django per se, si no de desarrollo web, a lo
que voy es que son conceptos que lo puedes aplicar en django, ruby o rails,
ASP .net o cualquier otro webframework.

Los archivos estáticos, es contenido que se entrega tal y como se encuentra
guardado. Los archivos mas comunes, css, js, imagenes (png, jpg, gif,
etc...) pero en general puede ser cualquier archivo.

Django, divide los archivos estáticos en 2 categorías. Statics y Media.

Statics son archivos estáticos que usa el desarrollador para la aplicación.
Mientras que Media son los archivos estáticos que sube el usuario al
momento de usar la aplicación.

Django ofrece 4 variables básicas para configurar los archivos estáticos.

STATIC_ROOT
STATIC_URL

MEDIA_ROOT
MEDIA_URL

Las variables *_ROOT es simplemente una cadena con la ruta (path) de donde
están esos archivos estáticos.
Ejemplo:
MEDIA_ROOT = '/var/statics/example.com/media/'
STATIC_ROOT = '/var/statics/example.com/static/'

Y las variables *_URL es el fragmento de URL de donde sera servidas.
Ejemplo:
MEDIA_URL = '/media/'
STATIC_URL = '/static/'

Entonces si tengo configurado las variables STATIC_* y hago:
http://www.example.com/static/somefile.txt

Va intentar buscar*:
/var/statics/example.com/static/somefile.txt

(Suponiendo que django sirve los archivos estáticos que es una pésima idea,
excepto si estas en desarrollo.)
* Django tiene algo llamado static finders, realmente no solamente busca en
esa localización, busca en una lista de localizaciones. Ya sea por alguna
definida o inspecciona cada app. Para mas información al respecto lee la
documentación.

Lo mismo ocurre para media.

Como dije antes, django no debería de servir los archivos estáticos. Y tal
vez te preguntes entonces para que le doy la ruta si no va a servir los
archivos estáticos? Bueno lo interesante pasa cuando haces 2 operaciones:
collectstatics, lo que hace es busca todos archivos estáticos de las apps y
de otros lugares (ver static finders) y los pone todos en el STATIC_ROOT.
La otra operación interesante es cuando el usuario sube archivos, a donde
van a parar esos archivos? Obviamente al MEDIA_ROOT y por eso son
necesarias las rutas.

Lo que haces en producción es configurar tu servidor web para que cuando
venga una petición http por /static/ (STATIC_URL) o /media/ (MEDIA_URL)
envié directo los archivos que estén en STATIC_ROO o MEDIA_ROOT
respectivamente. Este tema queda fuera de django, porque es mas de la
configuración de tu webserver.


Suficiente explicaciones, tu problema es que no tienes configurado tu
proyecto para que sirva los archivos estáticos.

Veamos el checklist:
STATIC_ROOT [X]
STATIC_URL    [X]
urls.py               [   ]

Veo que no tienes configurado django para que responda a las peticiones
HTTP, via /static/. Para activarlas esta explicado en la documentación.
https://docs.djangoproject.com/en/1.6/howto/static-files/#serving-files-uploaded-by-a-user-during-development

Si estas en producción, entonces configura tu webserver para que sirva los
archivos estáticos y no lo haga django.

No necesitas que sea tu ultima vez preguntando, pero no lees mas de como
funciona django (libros, tutoriales, cursos, screencasts, hay un sin fin de
material) seguramente seguirás preguntando, por cualquier problema que te
topes.



El 31 de agosto de 2014, 19:23, Pablo Ezequiel Ferreyra <
pabloeferreyra en gmail.com> escribió:

> hola gente, pido disculpas, creo que este es el ultimo mail que envio
> pidiendo ayuda, pero es que ya me tiene loco este proyecto, y soy bastante
> novato por ahora en el mundo de django, aunque gracias a todos y toda la
> ayuda, voy aprendiendo bastante sobre este lenguaje, y voy a poder
> aplicarlo mejor en los proximos proyectos.
>
> ahora, el problema que tengo, es que no logro entender como configurar los
> archivos estaticos, he buscado por google, y por la documentacion oficial,
> pero he entrado a callejones sin salida, de los que no he podido ver la luz
> del sol.
>
> por lo tanto, recurro una vez mas a su sabiduria para que me ayuden a
> resolver esto, por que no se donde estoy fallando, por que en teoria, esta
> todo correcto, no se que es lo que falla, pero todo lo que es static, y
> estilos css no me los carga ni por que le suplique, me levanta una pantalla
> sin ningun tipo de estilo en html, cosa que es bastante engorroso
>
> comparto mi codigo para que me puedan ayudar, como es costumbre, ya que
> esta vez, la consola no me ayuda por que no devuelve nada erroneo
> http://github.com/hackerzeta/sistema/
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140831/60668e36/attachment.html>


Más información sobre la lista de distribución Python-es