98 votes

Django Fichiers statiques 404

Je n'arrive pas à faire apparaître mes fichiers statiques. J'ai essayé divers paramètres et configurations de répertoires, etc., mais ils n'apparaissent que sous la forme de 404. J'ai installé debug_toolbar et je sais donc que STATIC_URL atteint mon contexte de requête.

La structure du répertoire montre /static (j'ai également placé le répertoire à l'intérieur du dossier de l'application repas, et des utilisateurs, juste pour essayer.

/mealmate
    /mealmate
    /meals
    /static
        /css
             /bootstrap.min.css
    /templates
    /users

Settings.py (quelques paramètres importants bien que j'ai expérimenté avec une variété d'autres) :

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

STATIC_URL = '/static/'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

WSGI_APPLICATION = 'mealmate.wsgi.application'

Dans le rendu de base.html

    <link rel="stylesheet" href="stackoverflow.com/static/css/bootstrap.min.css">

Des idées ? Merci

147voto

Amar Kamthe Points 1608

Il s'agit de la solution fonctionnelle pour l'accès statique/médias/modèles dans django pour Windows,

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

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

75voto

Arthur Tacca Points 2979

Pour moi, cela s'est avéré être causé par la mise de debug à false dans le fichier settings.py . Une solution de contournement consiste à passer le --insecure passer à runserver mais la véritable solution consiste à utiliser un serveur web approprié pour servir les fichiers statiques. Voir les réponses à cette question pour plus de détails.

23voto

eodgooch Points 1124

Si vous l'exécutez sur un serveur web, copiez-vous les fichiers statiques dans un dossier accessible au public ? Par exemple :

# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'

# URL prefix for static files.
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # location of your application, should not be public web accessible 
    '/home/your_name/website/mealmate/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

Alors vous pouvez utiliser ce post Fichiers statiques de Django et copier les fichiers statiques dans le dossier accessible au public en utilisant manage.py

# --link    Create a symbolic link to each file instead of copying.
# --noinput Do NOT prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput

J'espère que cela vous aidera !

14voto

johndpope Points 1485

D'après les commentaires ci-dessus - exécutez ceci

python manage.py findstatic --verbosity 2 css/styles.css

Aucun fichier correspondant n'a été trouvé pour 'css/styles.css'.

Nous recherchons dans les endroits suivants :
/Users/yourname/Documents/Workspace/test/staticfiles

J'ai simplement renommé mon statique vers le dossier Fichiers statiques et tout allait bien. (Je suis sur osx + django 1.x)

utiliser le mode non sécurisé peut ne pas faire de mal si vous êtes sur la boîte de développement locale - sinon, vous risquez toujours d'obtenir des erreurs 404.

python manage.py runserver --insecure

UPDATE

En creusant dans settings.py, j'ai trouvé la ligne en infraction.

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)

11voto

Kunal Kumar Points 779

Si vous avez récemment changé le débogage à false dans le fichier de paramètres. Suivez cette procédure.

La plupart du temps, cela est dû au fait que le paramètre debug est faux dans settings.py. Si vous passez l'option --insecure à runserver, cela devrait fonctionner. Donc si vous faites python manage.py runserver 0.0.0.0:8000 le changer en python manage.py runserver 0.0.0.0:8000 --insecure à la place.

Cela devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X