Está mezclando y combinando el manejo de archivos estáticos pre y post Django 1.3. Originalmente, todos los archivos estáticos se publicaron desde MEDIA_URL
, pero Django 1.3 introdujo el paquete contrib staticfiles y las configuraciones asociadas STATIC_ROOT
y STATIC_URL
. django.views.static.serve
utiliza la nueva aplicación staticfiles, que no ha configurado.
Suponiendo que ejecuta Django 1.3, primero, tendrá que agregar 'archivos estáticos' a su INSTALLED_APPS
. Luego, deberá definir STATIC_ROOT
y STATIC_URL
. La ubicación estándar es un directorio de nivel de raíz de proyecto denominado "estático".
También tendrá que añadir el procesador staticfiles contexto de la plantilla:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.static',
)
Esto hará que la variable STATIC_URL
disponible en sus plantillas, lo que puede hacer referencia a los recursos con algo como {{ STATIC_URL }}css/style.css
Todos sus recursos estáticos también deberán ir a un directorio de nivel (s) de aplicación llamado "estático". El directorio "estático" del nivel de raíz del proyecto real nunca se usa directamente. Es simplemente el lugar donde el comando de administración collectstatic
vacia todos sus recursos estáticos para usar en producción.
Si desea recursos estáticos de todo el proyecto (no ligada a ninguna aplicación en particular), tendrá un directorio totalmente independiente (es decir, no el mismo que MEDIA_ROOT
oSTATIC_ROOT
). Tiendo a usar uno llamado "activos". A continuación, tendrá que decirle a Django que mirar en aquí para recursos estáticos, así como con el ajuste STATICFILES_DIRS
:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)
MEDIA_ROOT
/MEDIA_URL
están ahora sólo se utiliza para la carga de usuarios (por ejemplo, cualquier archivo creado a través de FileField
s y s ImageField
, por lo que aún se necesita, pero no se va a almacenar cada vez manualmente nada allí.
al llegar a la producción, su servidor web tendrá que servir tanto MEDIA_ROOT
y STATIC_ROOT
en MEDIA_URL
y STATIC_URL
, respectivamente. también necesitará ejecutar:
$ python manage.py collectstatic
Para hacer que Django compile todos sus archivos estáticos en el directorio especificado por STATIC_ROOT
.
Uf, debería haber recordado que estaba trabajando en el 1,3 cuando el código es de 1.2, ¿hay alguna forma de que no tenga que cambiar demasiado en el código 1.2 para poder usar ese directorio sin ningún problema? ¿O sería mejor para mí degradar a django 1.2? – StanM
Hay algunas otras configuraciones, como 'BASES DE DATOS 'que pueden darle advertencias de depreciación o pueden necesitar modificaciones para compatibilidad con Django 1.3, pero hay relativamente pocos cambios obligatorios en general. Personalmente, recomendaría seguir con 1.3 y hacer que la aplicación funcione. El ligero trabajo potencialmente involucrado en hacer que funcione es ampliamente superado por los beneficios de cosas como archivos estáticos, vistas basadas en clases, etiquetas de plantilla mejoradas, etc. Además, hará que sea más fácil saltar finalmente a 1.4, que será casi una necesidad tener la liberación de lo que he visto. –