web-dev-qa-db-fra.com

Django Static files 404

Je n'arrive pas à faire monter mes fichiers statiques. J'ai essayé divers paramètres et configurations de répertoire, etc., mais ils se présentent sous la forme de 404. J'ai installé debug_toolbar, alors sachez que STATIC_URL est en train d'atteindre le contexte de ma demande.

Structure du répertoire affichant/statique (j'ai également placé le répertoire dans le dossier de l'application repas, ainsi que les utilisateurs, juste pour l'essayer.

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

Settings.py (quelques paramètres importants, bien que j'aie expérimenté de nombreux 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 base.html rendu

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

Des idées? Merci

55
KindOfGuy

C'est la solution de travail pour un accès statique/multimédia/modèle dans Django pour Windows,

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )
90
Amar Kamthe

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',
)

Ensuite, vous pouvez utiliser cet article Fichiers statiques Django et copier les fichiers statiques dans le dossier public accessible à l’aide de 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 pourra aider!

21
eodgooch

Pour moi, cela a été causé par la définition de debug sur false dans settings.py. Une solution de contournement consiste à passer le commutateur --insecure à runserver, mais la vraie solution consiste à utiliser un serveur Web approprié pour gérer les fichiers statiques. Voir les réponses à cette question pour plus de détails.

21
Arthur Tacca

J'étais également coincé dans le problème 404 jusqu'à ce que je réalise que Apache avait bloqué les demandes du répertoire statique. J'ai utilisé python manage.py collectstatic pour copier tous les fichiers statiques dans le répertoire static sous la racine de mon projet, c'est-à-dire/var/my/site/static . Avec

Alias /static /var/my/site/static
<Directory /var/my/site/static>
        Require all granted
</Directory>

dans /etc/httpd/conf/httpd.conf , cela fonctionne correctement maintenant.

Si aucune des réponses ci-dessus ne fonctionne, vous pouvez envisager de vérifier la configuration de votre serveur.

5
Darwin

J'ai simplement ajouté l'équivalent de

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)

pour que cela fonctionne. Bien sûr, remplacez absolute_path_to_project par votre chemin actuel et, si nécessaire, ajoutez la lettre du lecteur.

5
Seth

Assurez-vous que votre repas est dans votre INSTALLED_APPS

4
chrisortman

dans Django, vous avez un avantage supplémentaire pour vos modèles: vous pouvez lier des statistiques comme celle-ci et c’est peut-être votre problème!

<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>

il vaut mieux utiliser 

{% static 'nom_fichier'%}

et c’est aussi plus facile. Pour en savoir plus, je me réfère à https://docs.djangoproject.com/fr/1.11/intro/tutorial06/

2
Ebrahim Karimi

Je suppose que vous utilisez Django1.3 + ici.

Tout d’abord, vous devez définir quelques paramètres supplémentaires:

STATICFILES_FINDERS = [
    'Django.contrib.staticfiles.finders.FileSystemFinder',
    'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

STATICFILES_DIRS = [
    path.join(TOP_DIR, 'static'),
]

STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'

Cela devrait vous aider à trouver ce répertoire.

De plus, vous devriez toujours accéder à vos fichiers statiques en utilisant STATIC URL:

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
2
drewman

à partir des commentaires ci-dessus - lancez ceci

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

Aucun fichier correspondant trouvé pour 'css/styles.css'.

En regardant dans les endroits suivants:
/Utilisateurs/votrenom/Documents/Espace de travail/test/staticfiles

J'ai simplement renommé mon dossier static en staticfiles et tout allait bien. (Je suis sur osx + Django 1.x) 

utiliser le mode non sécurisé peut ne pas nuire si vous êtes sur la boîte de dev locale - sinon vous risquez toujours d'avoir 404 erreurs. 

python manage.py runserver --insecure

METTRE À JOUR

creuser dans settings.py a trouvé la ligne violée. 

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

Dans mon cas, tout ce que je devais faire était de relancer le serveur:

python manage.py runserver
0
Davor Josipovic

Je pense que vous avez manqué de mettre l'application INSTALLED_APPS dans votre fichier settings.py, vous devriez ajouter "mealmate"

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

Après cela, les fichiers statiques et de commande seront visibles par Django. J'avais des problèmes avec les commandes et c'est comme ça que je l'ai corrigé.

0
Omar Alvarado