2012-04-15 14 views
12

Parece que no puedo cargar mis archivos estáticos desde mis plantillas. Seguí la documentación oficial pero me falta algo.Django no está publicando archivos estáticos, obteniendo errores 404

Mi disposición de directorios (generada por Django, la mayoría de los archivos omitidos):

myproject 
    myproject 
    settings.py 
    urls.py 
    static 
    css 
     bootstrap.css 
     main.css 
    templates 
    base.html 
    myapp1 
    myapp2 
    ... 
    manage.py 

Mi settings.py:

STATIC_URL = 'static/' 

Estoy referencia a mis hojas de estilo como tal (de mis plantillas):

{% load staticfiles %} 
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css"> 
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css"> 

Qué le da esto una vez prestado (en HTML):

<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="static/css/style.css" type="text/css"> 

Sin embargo, estos enlaces en realidad no llevan a ninguna parte (cuando los visito recibo el error 404 de Django). Siento que podría solucionar esto agregando algo en urls.py, pero pensé que Django lo hizo automáticamente cuando se ejecuta el servidor. ¿Qué me estoy perdiendo?

+2

Pruebe: 'python manage.py findstatic --verbosity 2 css/styles.css' para ver dónde Django está buscando sus archivos estáticos. – deed02392

Respuesta

22

¿Ha definido su directorio de archivos estáticos en settings.py?

Supongo que tiene 'django.contrib.staticfiles', en sus aplicaciones instaladas.

Si no ha definido su archivos estáticos dir, que podría por hacer algo como esto:

import os.path 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'), 
) 
+0

Sí, tengo 'django.contrib.staticfiles' cargado y tengo' STATIC_URL = '/ static /' 'en mi archivo de configuración. – n0pe

+0

¿Has completado STATICFILES_DIRS con la ruta absoluta a tu carpeta estática? Al igual que la respuesta anterior dijo que hacer. – shadrx

+0

¡No! Agregué la ruta absoluta del sistema operativo a mi directorio estático y funcionó. Muchas gracias. – n0pe

1

Pensé que Django hizo esto automáticamente cuando se ejecuta el servidor?

¿Por qué crees eso? Si ha seguido la documentación oficial, no habrá encontrado eso. Lea lo que tiene que hacer para atenderlos en el desarrollo here.

Hay otro problema. Su STATIC_URL es un enlace relativo, por lo que los navegadores agregan a la URL de la página existente. Por lo tanto, si está en la página /foo, 'static/css/style.css' evalúa a /foo/static/css/style.css'.

Asegúrese de que o bien comienza con / - es decir /static/ - o es una URL completa, es decir, http://myserver.com/static/.

+0

Lo estoy ejecutando localmente, así que probé 'localhost/static /', 'localhost: 8000/static' y'/static/'todo con el mismo resultado. Cuando utilicé el método 'localhost', simplemente obtuve una página' about: blank' de Chrome. Cuando usé '/ static /', obtuve otro 404. – n0pe

+0

En respuesta al enlace que brindé, estoy usando el método 'runserver' y mis archivos están en STATIC_URL, lo que (de acuerdo con los documentos) significa que debe ser automático . También intenté importar el módulo sugerido por el enlace y todavía nada. – n0pe

1

Comprobar si STATICFILES_FINDERS se define en su settings.py

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

El valor por defecto de STATICFILES_FINDERS es lo suficientemente bueno, pero tiene 2 opciones:

  • es necesario tener el archivo estático dentro de una aplicación y tener esta aplicación en su INSTALLED_APPS

  • o si necesita definir STATICFILES_DIRS con su ruta a los archivos estáticos si esperan ser el comportamiento de la de django.contrib.staticfiles.finders.FileSystemFinder

3

Esta es la solución de trabajo de estática/media/acceso plantilla en Django para las ventanas,

settings.py

import os.path 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join('static'), 
) 
0

Encontré este problema también. Y he resuelto el problema mediante la revisión del href así:

<html> 
<link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css"> 
</html> 
3

Mi problema fue resuelto mediante la adición de "STATICFILES_DIRS" en el archivo settings.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (os.path.join('static'),) 
-3

Mi solución fue DEBUG = True en la configuración.

Cuestiones relacionadas